国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C語言面試題之字符串操作

2019-11-08 02:10:24
字體:
供稿:網(wǎng)友
今天做了花了幾分鐘做了三道C語言面試題,跟大家分享一下:

找錯Void test1(){char string[10];char* str1="0123456789";strcpy(string, str1);}

答:string 大小不夠 str1末尾還有一個'/0'Void test2(){char string[10], str1[10];for(I=0; I<10;I++){str1[i] ='a';}strcpy(string, str1);}

答:字符串沒有加’/0’,雖然兩個字符數(shù)組一樣的大,但是沒有考慮字符串后面的‘/0,’導(dǎo)致程序出錯

Void test3(char* str1){char string[10];if(strlen(str1)<=10){strcpy(string, str1);}}

答:對試題3,if(strlen(str1) <= 10) 應(yīng)改為if(strlen(str1) < 10),因為strlen的結(jié)果未統(tǒng)計'/0'所占用的1個字節(jié)。

當(dāng)沒有給字符串留'/0'的位置時候會出現(xiàn)的奇怪錯誤 

int     m; 

char        n[6];   

scanf("%d|",&m); 

PRintf("%d/n",m); 

scanf("%[0-9]|",n);  

printf("%d %s",m,n);  

以上代碼當(dāng)輸入 1|600000|時候會輸出  

1  

0 600000 

你會發(fā)現(xiàn)第一個參數(shù)的值變了。這是為什么么呢?當(dāng)將第二個參數(shù)如下聲明就會錯誤消失  

char        n[7];       (PS必須留一個位置給'/0'要不然會出現(xiàn)奇怪的錯誤)  

我的理解是'/0'不夠造成的內(nèi)存溢出,而這兩個內(nèi)存單元正好是連續(xù)的。'/0'賦值到了m上和'/0'的ASCLL碼值剛好是0;  

因此我們來做一個實驗,我們用最開始的那段代碼,即n只有6個內(nèi)存單元  

這時候我們輸入  1|6000001|時候會輸出  

1  

49 6000001  

可以發(fā)現(xiàn)第一個參數(shù)的值變成了49;這恰好是ASCLL碼上1的值;這當(dāng)然不是巧合。你可以試試別的參數(shù)。當(dāng)然如果你的第二個參數(shù)輸個10位長度那么這會更加明顯。  

這也就是為什么我們公司要寫那么多宏定義像如下一樣的,在定義時就預(yù)留了'/0'的位置。就是為了防止我的小白的錯誤。 

typedef char n[7]; 

剖析:考查對基本功的掌握:(1)字符串以'/0'結(jié)尾;(2)對數(shù)組越界把握的敏感度;(3)庫函數(shù)strcpy的工作方式


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 德格县| 集贤县| 峨山| 兰溪市| 呼玛县| 绥棱县| 平和县| 广宗县| 鹤壁市| 广宁县| 金平| 台北市| 宾川县| 聂荣县| 嘉鱼县| 浦城县| 西藏| 屯昌县| 荥阳市| 隆化县| 鹤庆县| 邮箱| 天长市| 江达县| 肇东市| 江津市| 平安县| 原平市| 嵊泗县| 依兰县| 西乌珠穆沁旗| 哈巴河县| 洛川县| 灵川县| 荥阳市| 宝坻区| 阳原县| 红安县| 资阳市| 鲁甸县| 黄大仙区|