Re: [問題] scanf問題

看板C_and_CPP作者 (方格子)時間14年前 (2011/03/06 04:02), 編輯推噓4(404)
留言8則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《hibrain (你腦卡好)》之銘言: : #include <stdio.h> : int main(void) : { : char str[100]; : printf("請輸入字串\n"); : scanf("%s",str);//使用scanf輸入為陣列時不要加上& : //使用scanf 輸入數字或單一字元需加上& : printf("輸入的字串為%s\n",str); : system("pause"); : return 0; : } : 在書上有看到,當使用scanf輸入為陣列時不要加上& : 可是我用scanf("%s",str);跟 scanf("%s",&str); : 出來的結果是一樣的啊,那有加上& 會有什麼問題嗎 ┌─┬─┬─┬─┐ char str[6] │ t│ e│ s│ t│ └─┴─┴─┴─┘ ┌──→01 02 03 04 (記憶體位置) ┌┴┐ str │01│ 使用str的話,會得到陣列的開始記憶體位置 └─┘ 25←┐ └───┐ ┌┴┐&是用來取變數的記憶體位置 &str[0] │01所以&str[0]就是取str[0]的記憶體位置 └─┘│ ┌─┘ ┌┴┐ &str則是指向str的記憶體位置 &str │25│ └─┘ 如果你用scanf("%s", &str); 那他就會把東西存到一個未知的位置去 這是基本的認知 至於為什麼你會有用&str還是一樣的狀況... 還請版上其他更厲害的大大來說明 --

老闆都不懂.. ( ′-`)y-~

這裡禁煙喔XDDDD
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.127.107 ※ 編輯: annheilong 來自: 61.228.127.107 (03/06 12:03)

03/06 12:31, , 1F
我輸入是用%s 所以寫入就是字串啦
03/06 12:31, 1F
真是抱歉,弄錯例子 平常不會存整數陣列不會這樣存Orz ※ 編輯: annheilong 來自: 61.228.127.107 (03/06 14:27)

03/06 14:36, , 2F
陣列名稱不是指標, 只是在by value傳遞或做運算時會
03/06 14:36, 2F

03/06 14:37, , 3F
decay成指標, 其值是 &array[0]
03/06 14:37, 3F

03/06 14:44, , 4F
str本身代表的是一個指標 <= 其實這句話有問題
03/06 14:44, 4F

03/06 14:44, , 5F
str代表的就是陣列本身了
03/06 14:44, 5F
使用str的話,會得到陣列的開始記憶體位置a 這樣子打呢?

03/06 14:45, , 6F
char *str = malloc(10); 這樣才是指標指向陣列
03/06 14:45, 6F

03/06 15:43, , 7F
認真畫圖有推
03/06 15:43, 7F
※ 編輯: annheilong 來自: 61.228.127.107 (03/06 15:56) ※ 編輯: annheilong 來自: 61.228.127.107 (03/06 15:57)

文章代碼(AID): #1DSmTpmE (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
2
12
完整討論串 (本文為第 2 之 2 篇):
問題
4
8
問題
2
12
文章代碼(AID): #1DSmTpmE (C_and_CPP)