看板 C_and_CPP 關於我們 聯絡資訊
#include<stdio.h> #include<stdlib.h> int main() { char str1[]=""; fgets(str1,10,stdin); system("pause"); } 我有兩個問題想請問,希望板上的高手能幫忙一下, 問題一 str1[]=""代表的是一個空陣列嗎?fgets是否一定只能讀入空陣列呢? 問題二 str1[]="",如果改成*str1為何執行會有問題呢? 我知道fgets的function大概的樣子,但是不了解比較detail的一些東西! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.194.103
james732:char str1[]=""; 是一個長度為1,內容只有\0的陣列 10/29 12:02
james732:這麼寫應該會有overflow問題 10/29 12:03
kingofsdtw:A2: str1被宣告成指標 其內容指向"" 10/29 12:11
loveme00835:1.是 array access out of bounds 吧 XD 10/29 12:21
loveme00835:2.這就像之前回答你的一樣...指到的那塊是唯讀的不能 10/29 12:22
loveflames:會出現overflow沒錯 10/29 12:23
loveme00835: 改值, 仔細看好fgets 他接受的引數是 const char*還 10/29 12:23
loveme00835: 是 char*, 雖然 char *str = "123" 這個 str 的型態 10/29 12:23
loveme00835:是 char*, 但是它只能當 const char* 來操作, 所以我 10/29 12:24
loveme00835:會要你這類的字串都用這種指標來接 10/29 12:24
loveme00835:其實函式的prototype就會透露了他會做的動作, 傳址表 10/29 12:28
loveme00835:示他會改到你的記憶體, 但是傳 pointer to const表示 10/29 12:29
loveme00835:它只有藉由指標去讀值而已, 你連prototype都不清楚的 10/29 12:29
loveme00835:話, 不能稱作「知道他大概的樣子喔」, 而且也可以算你 10/29 12:30
loveme00835:沒有呼叫他的權利, 因為它所要的 precondition 你都不 10/29 12:30
loveme00835:知道要怎麼確保 10/29 12:31
james732:http://ppt.cc/g;80 <= 這是fgets比較正確的範例 10/29 12:34
james732:請注意它用的是 char mystr[100]; 而非 char [] = ""; 10/29 12:35