[英]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.