2015-02-11 79 views
-1

我正在讀取輸入內容並將其放入指針中。我用的malloc所以我不知道自己做錯了什麼打印指針信息時出現分段錯誤(核心轉儲)

CODE:

#define BUFFER 30 //in my .h file 

char *inStr; 
inStr = malloc(sizeof(char*)*BUFFER); 
scanw("%s", &inStr); 
inStr[strlen(inStr)] = '\0'; 
mvwprintw(stdscr, 0, 0, "%s",inStr); 

我試圖將其輸出到ncurses的董事會和我不知道爲什麼會這樣。

malloc(sizeof(char)*BUFFER) 
+0

什麼是「緩衝區」?它的內容是什麼?你怎麼知道'malloc()'成功了?什麼被放入'inStr'?爲什麼寫'inStr [strlen(inStr)] ='\ 0';' – John3136 2015-02-11 23:27:06

+0

'sizeof(char *)'?什麼是「緩衝器」? – 2015-02-11 23:27:18

+1

你malloc的東西,沒事。你確定* char *'不應該是'char'?第四行似乎完全沒用,因爲'scanw'應該爲你終止這個字符串(你認爲'strlen'如果*沒有*,它會工作嗎?)。而這:'scanw(「%s」,&inStr);'應該'scanw(「%s」,inStr);' – WhozCraig 2015-02-11 23:29:59

回答

3

第一項,對於「%S」格式,你需要一個指針傳遞給一個緩衝:當我按下了輸入

+0

我認爲這是&部分是搞砸了,謝謝! – Exikle 2015-02-11 23:33:25

0

更改進入崩潰。實際上你正在傳遞一個指向緩衝區的指針。丟掉&。其次,strlen由末尾存在的null定義,因此使用它來確定在哪裏放置null是有點荒謬的。相反,你必須相信scanw才能正確終止它。請注意,這是一個巨大的假設,並且是整個scanf系列受到緩衝區溢出困擾的很大一部分 - 函數不知道緩衝區有多大。另外,正如其他人指出的那樣,您的malloc大小已關閉 - 您可能只想要類似malloc(BUFFER)的東西 - 根據定義,noteof(char)爲1。

char *inStr; 
inStr = malloc(BUFFER); 
scanw("%s", inStr); 
mvwprintw(stdscr, 0, 0, "%s",inStr); 
相關問題