首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言 sprintf 字符串拼接後逐字符打印錯誤分析

     編輯:程式設計疑難解答

代碼片段:

sprintf(buf, "%d%d%d", x, y, z);  // buf = "123"
for (l = 0; l < strlen(buf); l++)
    printf("%s\n", buf[l]);       // 錯誤:%s 期望 char*,實傳 char

三大問題

  1. #include 缺少頭文件名(應為 stdio.h、string.h)
  2. 變量未初始化,雖然此處賦值前已初始化,但習慣上建議定義即初始化
  3. 核心錯誤:printf("%s", buf[l]) 傳入單字符,導致以字符值為地址讀取內存 → 段錯誤或亂碼

正確寫法

// 方案 1:逐字符打印
for (l = 0; l < strlen(buf); l++)
    printf("%c\n", buf[l]);

// 方案 2:直接打印整個字符串
printf("%s\n", buf);

調試建議

  • 關鍵點加日志:printf("len=%zu\n", strlen(buf));
  • 編譯器開啟 -Wall -Wextra 會直接報警 format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved