字串處理易錯點

2021-07-07 05:16:47 字數 2098 閱讀 7395

一.知識點

1.字元指標和字元陣列

(1)字元指標,是個變數,存放的是位址而已。是個指標,如只

定義,則指標指向不可用的位址 ,不能亂用

,則指標沒指向任何位址,賦值後用來指向乙個字串。所以用時必須malloc

(2)字元陣列,定義是系統就為其分配了陣列大小的區域。字串定義時可以為陣列中的每個元素賦值。

2.字元可以通過ascii碼進行演算法運算

例:字元轉換為數字

函式 atoi

字元9減去字元0就是9     '9'-'0'

統計字母重複次數,利用差值作為陣列索引

'z'-'a'就是26

3.字元指標賦值

*poutputstr

++=pinputstr[i-1];//給字串指標賦值

*poutputstr='\0'; //字串結束賦值

4.sizeof字元指標的長度為4

二.例子

1.字串陣列和字元指標

char day[15] = "abcdefghijklmn";

char* strtmp = "opqrstuvwxyz";

char* mytmp;

mytmp="aaaaaaaaaaaaaa";

(1)定義指標時,編譯器並不為指標所指向的物件分配空間,它只是分配指標本身的空間。定義字串陣列時,為其分配了記憶體

(2)char day[15] = "abcdefghijklmn";這樣理解,定義字串陣列時系統為其分配了15位元組的空間,

然後用「abcdefghijklmn」來初始化這個字串陣列。char* strtmp = "opqrstuvwxyz";這樣理解,

系統認為"opqrstuvwxyz" 是字串常量,儲存在常量區(區別於堆疊)。用strtmp這個指標指向了這個區域。

2.常見錯誤

錯誤1:

char *name;

scanf("%s",name);

printf("%s",name); 

有的編譯器雖然也能通過,但這是錯誤的,因為是個指標,定義時指向不可用的位址。解決這個問題有兩種方法:用陣列的方法或給字元針針分配記憶體空間的方法。

陣列的方法:

char name[20];

scanf("%s",name);

printf("%s",name); 

給字元針針分配記憶體空間的辦法: 

char *name;

name=(char*)malloc(50);      //此時name已經指向乙個剛剛分配的位址空間。

scanf("%s",name);

printf("%s",name);

錯誤2:

char *ps;

ps="c language"; 

這樣是正確的!

char a[10];

a[10]="hello";

這樣是錯誤的!

1.char a[10]; a[10]="hello";//乙個字元怎麼能容納乙個字串?況且a[10]也是不存在的!

2.char a[10]; a="hello";//這種情況容易出現,a雖然是指標,但是它已經指向在堆疊中分配的10個字元空間,現在這個情況a又指向資料區中的hello常量,這裡的指標a出現混亂,不允許 

錯誤3:不能使用關係運算子「==」來比較兩個字串,只能用strcmp() 函式來處理。賦值也是,不能用=,只能strcpy

試圖使用關係運算子或判等運算子來比較字串是合法的,但不會產生預期的結果:

if (str1==str2) ...    /*** wrong ***/

這條語句把str1和str2作為指標來進行比較,而不是比較兩個陣列的內容。因為str1和str2有不同的位址,所以表示式str1 == str2的值一定為0。

錯誤4:

char str1[40]="hello world!";    

str1[4]='a';  //正確,定義字串陣列時,就分配了40個位元組的空間,hello world是為其初始化的值,當然可以修改。

char *str1="hello world!"; 

str1[4]='a'; //錯誤,str指標指向的是乙個字串常量,儲存在常量去,不允許修改

python 字串易錯問題

在用單引號括起的字串中,如果包含撇號,就將導致錯誤。原因 這是因為這會導致python將第乙個單引號和撇號之間的內容視為乙個字串,進而將餘下的文字視為python 從而無法正確地確定字串的結束位置。示例 print we re chinese 測試結果 撇號位於兩個雙引號之間,因此python直譯器...

面試易錯點

一 char str1 abc char str2 abc char str3 abc char str4 abc str1和str2是不相同的,str3和 str4是相同的,str1和str2是儲存在堆上,str3和 str4在常量區,這兩個指標指向的是同一位址 編譯器認為p1指向的 abc 和p...

總結 易錯點

題目要求是 結尾,我使用了str 1 str 2 single line containing only marks the end of a test case.題目給的是 f1 1 f2 2 fn fn 1 fn 2 n 3 我卻從f0開始推,並且迴圈跟著從0開始了 題目可能會出現一道腦筋急轉彎...