gpt4 book ai didi

c - 为什么我会出现段错误?

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:19 25 4
gpt4 key购买 nike

我是 C 的新手,我试图逐个字符地读取一个文件的内容并将它们输出到流中。但即使我的 fopen() 命令被注释掉,我也会收到段错误(核心已转储)。

我必须运行命令:./a.out < testWords.in > myOut.txt 才能正确执行我的文件。

这是我目前所拥有的:

#include  <stdio.h>
void main(char *fileName[])
{
printf("filename is %s.\n",fileName[0]);
//Get file based on a string inputed
FILE *fp=fopen(fileName[0],"r"); //Fetches our file as read only
char ch;
int lineCount = 0;
int wordCount = 0;
int charCount = 0;

//Failed to find/open file. NULL character.
if (fp == 0) printf("Woops! Couldn't open file!\n");

//While not at end of file, grab next char.
else while( (ch=fgetc(fp)) != EOF)
{
if (ch == '\n') //on newline
{
//Prints (charCount,wordCount)\n lineCount:
printf("(%d,%d)%c%d:",charCount,wordCount,ch,lineCount);
charCount = 0;
lineCount += 1;
}
else printf("%c",ch); //mirrors char.
}
fclose(fp); //Closes file (gotta be tidy!)

}

最佳答案

您不能只是发明一种调用main 的方法。您需要使用其中一种标准方法,如下所示:

int main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "Missing filename\n");
return -1;
}
FILE *fp = fopen(argv[1], "r");
// ...
}

请注意 argv[0] 包含程序名称(如果可用;如果不可用,则包含一个空字符串)。

您的程序出现段错误是因为您在 char *filename[] 参数中收到了 int argc 参数。如果您使用单个命令行参数运行程序,作为第一个参数传入的值将是 2,这不是有效的指针值。表达式 filename[0] 取消引用该地址并导致段错误。

关于c - 为什么我会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com