[問題] scanf問題

看板C_and_CPP作者 (你腦卡好)時間14年前 (2011/03/06 11:06), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/2 (看更多)
#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); 出來的結果是一樣的啊,那有加上& 會有什麼問題嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.31.130.76

03/06 11:30, , 1F
這是c語言喔
03/06 11:30, 1F

03/06 11:42, , 2F
陣列的名稱本身就是一個指標,存的是一個記憶體位置
03/06 11:42, 2F

03/06 11:42, , 3F
scanf後面要餵的參數是要給記憶體位置的
03/06 11:42, 3F

03/06 11:43, , 4F
譬如int str[6] str指向這個陣列的起始位置&str[0]
03/06 11:43, 4F

03/06 11:43, , 5F
char str[] 的 str == &str 要加不加都可以
03/06 11:43, 5F

03/06 11:44, , 6F
也就是str跟&str[0]是一樣的 而&str則是實際存str的
03/06 11:44, 6F

03/06 11:44, , 7F
記憶體位置
03/06 11:44, 7F
※ 編輯: hibrain 來自: 61.31.130.76 (03/06 11:44)

03/06 11:46, , 8F
是不是加了& 也沒關係啊
03/06 11:46, 8F

03/06 12:40, , 9F
傳 str 時,其資料型態是 char * 的一個位址;而傳 &str
03/06 12:40, 9F

03/06 12:41, , 10F
則資料型態是 char (*)[100] 的位址。位址會一樣,但型態
03/06 12:41, 10F

03/06 12:42, , 11F
不同。在這個例子沒差,在會比對型態的情況時,就會有錯
03/06 12:42, 11F

03/06 13:47, , 12F
喔喔,3q
03/06 13:47, 12F
文章代碼(AID): #1DSlf02v (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DSlf02v (C_and_CPP)