[爆卦]C scanf char是什麼?優點缺點精華區懶人包

為什麼這篇C scanf char鄉民發文收入到精華區:因為在C scanf char這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者spiderman007 (千里之外)看板C_and_CPP標題[問題] 請問scanf 可以接...


開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
dev-c

額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)


問題(Question):
目的是想輸入一個字串str,再輸入一個數字n...

接收輸入後....輸出一個從第n個字元輸出的字串str

如下程式碼..

char *str;

printf("請輸入字串: ");

scanf("%s",str); <---- 這是錯的,我將指標指向這個字串???

而我增加一個字元陣列 char string[20];

scanf("%s",string); str = &string[0]; <----- 這可以輸出正確答案...

請問前者為何不可?? 後者的寫法ok嗎?? 可是我並不能確定字元陣列設多大??

請多多指教..


餵入的資料(Input):


預期的正確結果(Expected Output):


錯誤結果(Wrong Output):


程式碼(Code):(請善用置底文網頁, 記得排版)


補充說明(Supplement):


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.46.147.232
angleevil:char *str<--只是指標,他沒有空間接收你的字元.至於 10/07 09:18
angleevil:任意長度的字元輸入.曾經有人發表過,只是我不知道是哪篇 10/07 09:19
xatier:你不能確定字元陣列設多大,那假如我輸入的東西超越你記憶 10/07 09:23
xatier:體大小怎麼辦? 任意長度的輸入這種東西理論上是不存在的 10/07 09:23
xatier:你有無限大小的記憶體跟硬碟嗎XDD 10/07 09:24
angleevil:QQ樓上.之前有人寫出來呢. 不過不好寫就是了 10/07 09:24
priv:scanf不是安全的function,認真要用根本不會用 10/07 09:33
priv:如果為了練習之用的話你只能把輸入buffer開大一點 10/07 09:33
priv:也許可以先malloc一塊比較大的,拷到適合大小的地方再free 10/07 09:34
wemee:即使你 char *srt; str='a'; 也會錯呀 10/07 09:42
wemee:char *str; 只是宣告一個指標 你不能賦值給他呀 10/07 09:43
wemee:char str[20];會正確 是因為你宣告他有20 byte的空間 10/07 09:44
wemee:然後str儲存陣列第一個元素的位置 10/07 09:44
wemee:這樣子 當然能夠正常的賦值給他呀 10/07 09:45
wemee:指標概念解決之後 接下來你第二個問題 你要動態配置字元陣列 10/07 09:56
wemee:可以參考樓上說的之外 不然就請使用者先輸入字元長度 10/07 10:00
wemee:根據長度 malloc 空間之後 再輸入字串 10/07 10:01
firejox:十三誡之四.... = = 10/08 00:40

你可能也想看看

搜尋相關網站