Re: [問題] scanf問題
※ 引述《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還是一樣的狀況...
還請版上其他更厲害的大大來說明
--
推
,
→
,
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.127.107
※ 編輯: annheilong 來自: 61.228.127.107 (03/06 12:03)
推
03/06 12:31, , 1F
03/06 12:31, 1F
真是抱歉,弄錯例子
平常不會存整數陣列不會這樣存Orz
※ 編輯: annheilong 來自: 61.228.127.107 (03/06 14:27)
推
03/06 14:36, , 2F
03/06 14:36, 2F
→
03/06 14:37, , 3F
03/06 14:37, 3F
→
03/06 14:44, , 4F
03/06 14:44, 4F
→
03/06 14:44, , 5F
03/06 14:44, 5F
使用str的話,會得到陣列的開始記憶體位置a
這樣子打呢?
→
03/06 14:45, , 6F
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)
推
03/06 16:48, , 8F
03/06 16:48, 8F
討論串 (同標題文章)