程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 基於C++中sprintf的錯誤總結詳解

基於C++中sprintf的錯誤總結詳解

編輯:C語言基礎知識
sprintf 是個變參函數,使用時經常出問題,而且只要出問題通常就是能導致程序崩潰的內存訪問錯誤。
下面對sprintf 常出錯誤問題進行簡單的總結:

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

將buf修改為char buf[6]

2、忘記第一個參數:原因用printf 用得用習慣了,偶爾會忘記
char buf[6];
sprintf(":%d", 3246);
printf("buf is %s\n", buf);

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

3、變參對應出問題:通常是忘記了提供對應某個格式符的變參,導致以後的參數統統錯位,檢查檢查吧。尤其是對應”*”的那些參數,都提供了嗎?
不要把一個整數對應一個”%s”

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

溫馨提示:a對應的應該是%d而不是%s
 
4、還有下面這種錯誤,我只能意會不知道怎麼來描述。現在給出錯誤的代碼和正確的代碼的例子。大家自己看吧~~
錯誤的代碼
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); //出現亂碼,得出的結果並非我們所需要的
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);//產生:"ABCDEFGHIJKLMN"
printf("buf is %s\n", buf);
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved