Относительно передачи строк в функции win32 api

#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 =»привет»;’ Но спасибо, что указали на это!