2015-12-29 2 views
0

имя студента напечатано правильно «alice», но имя student2 напечатано в «странных символах».Формат CString возвращает странный символ

char * student; 
student = "alice"; 

printf("student1 : %s\n", student); 

CString student2; 
student2 = "alice"; 

student = (char *)(LPCSTR)student2; 
printf("student2:%s\n", student); 

Почему после отливки с помощью «(char *) (LPCSTR)» вместо этого возвращается странный символ?

+0

В настройках проекта, вы компиляции с набором символов Unicode, MBCS, или Другие? – abelenky

+0

Я использую MBCS – user5726885

+1

Заголовок вопроса - 'CString.Format'. Но вы удалили 'CString.Format' из своего вопроса! – abelenky

ответ

0

Во-первых, эта программа работала для меня.

Однако это не значит, что это правильно.
С MBCS вы обычно используете макросы _T, чтобы убедиться, что ваши строки объявлены правильно.

Вот моя простая переписана часть кода:

#include "stdafx.h" 
#include "atlstr.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    LPCSTR student = _T("alice");  // Use the provided LPCSTR type instead of char*. 
    printf("student1 : %s\n", student); 

    CString student2(_T("alice"));  // Initialize a CString with the _T macro 

    student = (LPCSTR)student2;   // LPCSTR is typedef to char*. 
             // So you effectively had (char*)(char*)student2; 
             // TypeCasting something twice to the same type is stupid. 

    printf("student2:%s\n", student); 
    return 0; 
} 

Выход

student1 : alice 
student2:alice 
Смежные вопросы