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

首頁 > 編程 > C++ > 正文

基于C++中sprintf的錯(cuò)誤總結(jié)詳解

2020-01-26 16:12:22
字體:
供稿:網(wǎng)友
sprintf 是個(gè)變參函數(shù),使用時(shí)經(jīng)常出問題,而且只要出問題通常就是能導(dǎo)致程序崩潰的內(nèi)存訪問錯(cuò)誤。
下面對(duì)sprintf 常出錯(cuò)誤問題進(jìn)行簡(jiǎn)單的總結(jié):

1、緩沖區(qū)溢出:第一個(gè)參數(shù)的長(zhǎng)度太短了,解決辦法:將第一個(gè)參數(shù)的長(zhǎng)度擴(kuò)大。打印字符串時(shí),盡量使用”%.ns”的形式指定最大字符數(shù)
char buf[5];
sprintf(buf, ":%d", 3246);
printf("buf is %s/n", buf);

將buf修改為char buf[6]

2、忘記第一個(gè)參數(shù):原因用printf 用得用習(xí)慣了,偶爾會(huì)忘記
char buf[6];
sprintf(":%d", 3246);
printf("buf is %s/n", buf);

錯(cuò)誤提示: error C2664: 'sprintf' : cannot convert parameter 2 from 'int' to 'const char *'

3、變參對(duì)應(yīng)出問題:通常是忘記了提供對(duì)應(yīng)某個(gè)格式符的變參,導(dǎo)致以后的參數(shù)統(tǒng)統(tǒng)錯(cuò)位,檢查檢查吧。尤其是對(duì)應(yīng)”*”的那些參數(shù),都提供了嗎?
不要把一個(gè)整數(shù)對(duì)應(yīng)一個(gè)”%s”

char buf[100];
int a=6;
sprintf(buf, ":%d,%s", 3246,a);
printf("buf is %s/n", buf);

溫馨提示:a對(duì)應(yīng)的應(yīng)該是%d而不是%s
 
4、還有下面這種錯(cuò)誤,我只能意會(huì)不知道怎么來描述。現(xiàn)在給出錯(cuò)誤的代碼和正確的代碼的例子。大家自己看吧~~
錯(cuò)誤的代碼
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%s%s", a1, a2); //出現(xiàn)亂碼,得出的結(jié)果并非我們所需要的
printf("buf is %s/n", buf);

正確的代碼
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%.7s%.7s", a1, a2);//產(chǎn)生:"ABCDEFGHIJKLMN"
printf("buf is %s/n", buf);
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 渝中区| 曲阜市| 云阳县| 邵阳市| 华蓥市| 朝阳县| 花垣县| 共和县| 拜城县| 瓦房店市| 色达县| 铜陵市| 临猗县| 阳高县| 榕江县| 林甸县| 平山县| 江西省| 宝兴县| 山西省| 宝山区| 玉屏| 肇庆市| 太白县| 会昌县| 德庆县| 兴和县| 兴业县| 明水县| 阿克苏市| 水富县| 蚌埠市| 定结县| 龙井市| 苍梧县| 康马县| 临安市| 泗阳县| 凤山县| 塘沽区| 邛崃市|