作者spiderman007 (千里之外)
看板C_and_CPP
標題[問題] 請問scanf 可以接一個字元指標嗎??
時間Fri Oct 7 09:13:24 2011
開發平台(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