#c #winapi
#c #winapi
Вопрос:
Мне было интересно, есть ли какое-либо преимущество (только для более коротких строк) использования string
типа данных вместо массива символов или просто строки, такой как:
TextOut(hDC, 10, 10, "Hello", sizeof("HEllO") - 1)
Ответ №1:
На практике это не имеет никакого значения.
Тем не менее, API-интерфейсы Win32 требуют LPSTR
s или LPWSTR
s, поэтому все, что не является «одним из них», сначала должно быть преобразовано в соответствующий char*
тип, поэтому требуется очень небольшая дополнительная работа.
Я бы сказал, что гораздо важнее использовать тип данных, с которым вам удобно / знакомо / легко работать.
Ответ №2:
Одно из различий между строковым типом данных и встроенной строкой, как вы использовали их выше, заключается в том, что использование отдельной именованной ссылки (независимо от того, является ли тип строкой или массивом символов) предотвращает распространенную ошибку, когда вы изменяете строку, но забываете изменить копию внутри sizeof() . Если новая строка имеет другую длину, это будет иметь нежелательные последствия. Лучшей практикой является наличие единого места, которое позволяет вам обновлять оба одновременно, будь то с помощью const char* или строкового типа данных.
const TCHAR TEXTOUT_TEXT[] = _T("Hello");
TextOut( hDC, 10, 10, TEXTOUT_TEXT, sizeof(TEXTOUT_TEXT) / sizeof(TEXTOUT_TEXT[0]) - 1 );
Комментарии:
1. @user9955048 Спасибо, чувак, но я просто спрашивал о разнице между этими тремя. Поскольку я много программирую на ассемблере, мне удобнее всего использовать указатели для строк. Поэтому в большинстве случаев я использую что-то вроде: ‘char * text =»привет»;’ Но спасибо, что указали на это!