[問題] 請問scanf 可以接一個字元指標嗎??

看板C_and_CPP (C/C++)作者 (千里之外)時間14年前 (2011/10/07 09:13), 編輯推噓1(1018)
留言19則, 5人參與, 最新討論串1/1
開發平台(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

10/07 09:18, , 1F
char *str<--只是指標,他沒有空間接收你的字元.至於
10/07 09:18, 1F

10/07 09:19, , 2F
任意長度的字元輸入.曾經有人發表過,只是我不知道是哪篇
10/07 09:19, 2F

10/07 09:23, , 3F
你不能確定字元陣列設多大,那假如我輸入的東西超越你記憶
10/07 09:23, 3F

10/07 09:23, , 4F
體大小怎麼辦? 任意長度的輸入這種東西理論上是不存在的
10/07 09:23, 4F

10/07 09:24, , 5F
你有無限大小的記憶體跟硬碟嗎XDD
10/07 09:24, 5F

10/07 09:24, , 6F
QQ樓上.之前有人寫出來呢. 不過不好寫就是了
10/07 09:24, 6F

10/07 09:33, , 7F
scanf不是安全的function,認真要用根本不會用
10/07 09:33, 7F

10/07 09:33, , 8F
如果為了練習之用的話你只能把輸入buffer開大一點
10/07 09:33, 8F

10/07 09:34, , 9F
也許可以先malloc一塊比較大的,拷到適合大小的地方再free
10/07 09:34, 9F

10/07 09:42, , 10F
即使你 char *srt; str='a'; 也會錯呀
10/07 09:42, 10F

10/07 09:43, , 11F
char *str; 只是宣告一個指標 你不能賦值給他呀
10/07 09:43, 11F

10/07 09:44, , 12F
char str[20];會正確 是因為你宣告他有20 byte的空間
10/07 09:44, 12F

10/07 09:44, , 13F
然後str儲存陣列第一個元素的位置
10/07 09:44, 13F

10/07 09:45, , 14F
這樣子 當然能夠正常的賦值給他呀
10/07 09:45, 14F


10/07 09:56, , 16F
指標概念解決之後 接下來你第二個問題 你要動態配置字元陣列
10/07 09:56, 16F

10/07 10:00, , 17F
可以參考樓上說的之外 不然就請使用者先輸入字元長度
10/07 10:00, 17F

10/07 10:01, , 18F
根據長度 malloc 空間之後 再輸入字串
10/07 10:01, 18F

10/08 00:40, , 19F
十三誡之四.... = =
10/08 00:40, 19F
文章代碼(AID): #1EZb8syW (C_and_CPP)
文章代碼(AID): #1EZb8syW (C_and_CPP)