簡體   English   中英

具有char *數組的C中的scanf seg錯誤

[英]scanf seg fault in C with char* array

我正在研究一本有關操作系統的書,並且該書的一些示例代碼給了我運行時分段錯誤。 我對Java剛接觸C有點陌生,我希望有人可以指出正確的方向。

這里的小程序應該生成一個簡單的shell,讀入命令並派生一個進程來執行它。 問題出在本書的代碼本身中,即在“ scanf”函數調用處。 當我在“ osh>”提示符下輸入內容時,出現分段錯誤。

從我對C的了解來看,我認為可能需要為args數組分配內存,但是由於它是直接在main函數中聲明的數組,所以我可能不需要。 我認為,如果這樣做,它將存在於本書的代碼中。

無論如何,這是生成故障的代碼:

char* args[MAX_LINE/2 + 1]; /* command line (of 80) has max of 40 arguments */

int should_run = 1; 

int i, upper;

while (should_run){   
    printf("osh>");
    fflush(stdout);


scanf("%s", args); /* THIS CAUSES SEGFAULT */

char* localArgs[3];
char* pch;

/ * ... * /

先謝謝您的幫助。 在C語言中學習內存管理是一段漫長的旅程。

您正在傳遞一個指向scanf()的指針數組,它需要一個char數組。

如何正確使用scanf()掃描文本字符串的示例是

char string[100];

if (scanf("%99s", string) == 1)
 {
    printf("scanned string: %s\n", string);
 }
else
 {
    printf("error: unexepected error in `scanf()'.\n);
 }

仔細閱讀鏈接,以了解為什么我像以前那樣編寫此代碼,如果您這樣做,您將開始了解scanf()工作方式,並且當您這樣做時,您將開始編寫更強大的程序,並且可能也停止使用scanf()

char* args[MAX_LINE/2 + 1];

這將創建一個大小為(MAX_LINE / 2 + 1)個char指針的數組。 如果要將這些char指針之一用作字符串,則必須分配它們:

args[which_arg] = malloc(arg_max_length*sizeof(char));

並閱讀其中的文本:

scanf("%s", args[which_arg]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM