我有以下代碼:字符指針參數不同的行爲
void uppercase(char *sir)
{
for(int i=0;i<strlen(sir);i++)
{
sir[i]=(char)toupper(sir[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//char lower[]="u forgot the funny"; this works
//char *lower="u forgot the funny"; this gives me a runtime error
uppercase(lower);
cout<<lower<<"\n\n";
system("PAUSE");
return 0;
}
我注意到,如果我與焦矢量運行它的工作原理。 當我嘗試使用第二種方法運行時,它會生成運行時錯誤。 我想知道這種行爲的原因請。
一個真正的C++編譯器不應該*編譯*第二種情況。 –
@KerrekSB:在C++ 11中,我會同意。但是在C++ 03中,我相信這會編譯並定義好 - 這並不是說程序員可能期待什麼! –
@KerrekSB clang on osx只是發出警告'從字符串文字到'char *'的轉換已被廢棄[-Wdeprecated-writable-strings]' – SheetJS