在寫有關於字串的**時,總會有幾次是程式**奔潰,其中主要的兩個原因是——修改了字串常量的值和越界!
1 修改字串常量
char *str1="abcde";//字串常量,其中的abcde是存放在常量區,不能修改
char str2="abcde";//字串陣列,有『\0』,所以也是字串。可以修改。
str1[0] = 'x';//寫錯誤
str2[0] = 'x';//正確
2 越界。
越界是乙個很麻煩的問題,令自己防不勝防。因此現在輸入中,不會用到gets特別容易越界,將gets用fgets替換
char str2 = "abcde";//字串常量
strcpy(str2,"hello world");//error 越界(溢位)
先判斷下列字串的字數很長度。
# include int main()
其中strlen表示的是有效長度,不包括『\0』,還有就是字元在遇到『\0』時,表示該字串已經結束了。
例題:寫一函式,要求把兩個字串連線在一起,並且輸出最後的結果,看看奔潰的
#include #include #include #include char *mystrcat(char *des,const char *src)
while(*des++ = *src++);//複製
return p;}
//mystrcat("abcd","xyz");//時字串常量,不能修改
//char str1[10] = "hello";
//mystrcat(str1,"world");
//這個時字串數字,可以修改,但是越界。str1定義了10個單元長度,而 "hello"和"world"在一起有11個單位長度。
char str1[100] = "hello ";
mystrcat(str1,"world");//正確,
printf("%s\n",str1);
return 0;
}
C語言利用字串陣列讀取字串的誤區
最近碰到乙個很奇怪的問題,想想關了電腦也要再開機記錄下來 主要 如下 int main 要從控制台中讀取輸入的字串,定義了乙個char 型別的陣列,結果出問題了。當輸入 whos who輸出 whoswho 當輸入 wwwwww dddddd輸出 wwwwdddddd 有多糾結我就不說了,和同學討論...
c char字元相等比較 字串使用的小誤區
最近 評審時候遇到的這些坑。咋一看 貌似沒什麼問題,簡單的字串比較。可是仔細看了看感覺 不對勁,執行結果卻是一直是輸出 utf 32 這裡有個誤區是,字串 char 是不能直接比較的,下列 比較的是字串的位址,這樣就會導致它們字串位址永遠不會相等就一直輸出的是 utf 32 結果了。string s...
ORACLE in 字串,字串,字串
因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...