1、C/C++中字符串都是以’\0’結尾的。稍不留神就會造成字符串越界,例如:
char str[10];
strcpy(str,”0123456789”);
一般在復制字符串時一定要為在字符串長度的基礎上多申請一個字節內存給’\0‘
2、看看一下代碼會輸出什麼:
char str1[] = "Hello ZCM";
char str2[] = "Hello ZCM";
char *str3 = "Hello ZCM";
char *str4 = "Hello ZCM";
if (str1 == str2)
{
cout<<"str1 is same as str2\n";
}
else
{
cout<<"str1 is not same as str2\n";
}
if (str3 == str4)
{
cout<<"str3 is same as str4\n";
}
else
{
cout<<"str3 is not same as str4\n";
}
輸出:
C/C++把常量字符串放到單獨的一個內存區,即文字常量區,我的其他文章會對C++的代碼區段和性質作個總結,
這裡不熬述了。str1和str2是兩個字符串數組,我們會為他分配10個字節的空間並把“Hello ZCM”復制進去。所
以這是兩個初始地址不同的數組。
而str3和str4是兩個指針,我們無需為它分配內存以存儲字符串的內容,我們只需要把他指向“Hello ZCM”中的
內存地址就行了。由於“Hello ZCM”是字符常量,他在內存中只有一個拷貝,因此str3和str4指向的是同一個地址