我目前正在嘗試編寫我的CS實驗室,並得到我看不到的分段錯誤。我是在做一些愚蠢的事情還是什麼?代碼應該使用命令行參數(「blah.exe hello world」)並輸出它們周圍的橫幅。我們班沒有先前的C語言知識,但是之前的數據結構課程。從argc C分段錯誤
實施例輸出
===============
= hello world =
===============
來源:用gcc -std = C99 -Wall bannerize.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]) {
if(argc <= 1) {
return EXIT_FAILURE;
}
printf("TEST");
int row_length = argc + 3; //3 for space after last word and 2 extra border chars
for(int i = 1; i < argc; i++, row_length += strlen(argv[i]));
printf("TEST2");
char c;
while((c=getchar())!=EOF) {
printf("TEST3");
for(int i = 1; i < argc; i++, printf("%c", c));
printf("\n");
printf("%c ", c);
for(int i = 1; i < argc; i++, printf("%s ", argv[i]));
printf("%c\n", c);
for(int i = 1; i < argc; i++, printf("%c", c));
printf("\n");
}
return EXIT_SUCCESS;
}
工作正常編譯爲根本不帶參數運行,但添加任何命令行參數是在打印任何內容之前給出分段錯誤。
_在打印任何東西之前發生分段錯誤._ - 由於您的打印語句未刷新其輸出,您不知道這是真的。在每個末尾添加'\ n',例如'printf(「TEST \ n」);'以獲得更好的信息。或者,通過'fflush(stdout);'手動刷新輸出。 – mah
你至少要聲明'c'是'int'。除了'getchar'返回'int'外,'EOF'不會(通常)適合'char',所以'while'不會結束。 – Kninnug