c/c++中使用字符串的頻率還是比較高的,下面就字符串的不同定義及其使用方法做一些對比
字符串一般有以下三種定義方法:
1、char *p="hello";
2、char str[6]="hello";
3、string s="hello";
【第一種字符串】:這種定義方式會被編譯器默認為字符串常量,自行默認為是不會被改變的,所以編譯時會被存儲在一個只讀的數據段中,嘗試對這種類型字符串的改變是不被允許的。
如:
char *p="hello"; p[1]='x';
這個時候,輸出字符串就會爆出"段錯誤"(我這里的實驗平台是linux,會和windows有所不同),因為修改了內存只讀區域,這是不允許的;
【第二種和第三種字符串】:這種定義方式實際上是把存在只讀數據段中的字符串復制到了一個字符數組中,這種字符串中的任意字符都可以被隨便改變,這里不再做出演示。
*注意一下情況:
char *str1="hello"; char *str2="hello";
這個時候,str1和str2指向的其實是同一個內存地址,可以用一下語句進行驗證:
if(str1==str2) cout<<"str1=str2"<<endl;
*linux下定義字符串爆出warning的處理方法:在定義字符串時加上const限定修飾符,告訴編譯器這是常量,否則g++/gcc都會認為是變量,所以會爆出warning