字串的誤區!!!

2021-08-18 17:41:29 字數 1050 閱讀 4633

在寫有關於字串的**時,總會有幾次是程式**奔潰,其中主要的兩個原因是——修改了字串常量的值和越界!

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 ...