※ 引述《mrchildren3 ()》之銘言:
: 大家好 我是新手
: 想請問
: int main(void)
: {
: char str[10];
: int num = 9;
: sprintf(str[2], "%d", num);
: printf("str = %s \n", str[2]);
: system("pause");
: return(0);
: }
: 為何會無法執行
: sprintf 不是將 num 轉成 字串 存到str[2]中嗎
: 謝謝
str[2] 的 type 是 char, 存放的是字元
字串的 type 是 char *, 存放的是記憶體位址
所以應該要寫成這樣
printf("%s", &str[0]); // 陣列 [0] 的記憶體位址也就是 str 的開頭
寫成這樣也可以
printf("%s", str);
字元陣列的變數名稱可以當記憶體位址用,一般都會這樣寫也比較簡潔
字串和記憶體的觀念有了以後,看看以下做了什麼事
char str[10];
int num = 9;
sprintf(&str[2], "%d", num);
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│ │ │9 │\0│ │ │ │ │ │ │
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
str [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
printf("str = %s \n", &str[2]);
印出 9 \n
用 &str[2] 的結果只是把字元從第 [2] 個開始放,雖然沒什麼錯但是沒有意義
以上
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.252.82.98