一.知識點
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開始了 題目可能會出現一道腦筋急轉彎...