Я думаю, что строковые литералы в c++
- это тип const char*
. И вы не можете назначить объект const char*
объекту non-constant char*
. Но в Visual Studio 2010. Следующий код может компилироваться без ошибок или предупреждений, что, однако, приведет к ошибке выполнения.Почему я могу присвоить строковые литералы указателю char *
int main(void)
{
char *str2 = "this is good";
str2[0] = 'T';
cout << str2;
getchar();
return 0;
}
И если мы не изменить значение строки, чтение значения в порядке:
for(char *cp = str2; *cp !=0; ++cp) {
printf("char is %c\n", *cp);
}
getch();
return 0;
Так почему мы можем присвоить константный символ * к * полукокса здесь?
@unkulunkulu Ответ немного отличается от C++: согласно [lex.string], это _array of const char_ в C++ – dyp
@DyP, ответ на связанный вопрос охватывает C++ – unkulunkulu
@unkulunkulu О, sry, ты прав. Тем не менее, код выше _invalid_ в C++, см. [Diff.lex] – dyp