看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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