【发布时间】:2025-07-30 11:50:01
【问题描述】:
我正在尝试在 c 中实现一个重复的 cat 函数。我遇到了分段错误,我找不到原因。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
char* s; /* input string */
int c;
if(argc==1){
while (gets(s)){
puts(s);
}
}
else{
FILE *file = fopen( "./argv[1]", "r" );
while((c=fgetc(file))!=EOF){
fputc(c,stdout);
}
fclose(file);
}
return 0;
}
【问题讨论】:
-
首先,你应该调试你的程序。如果您不知道该怎么做,这是学习的最佳时机。这几乎总是会立即为您提供错误行,从而使您免于长时间搜索。其次,您从未为 s 分配内存。最后,您要打开
./argv[1],而不是"./argv[1]"。 -
啊,是的,每天的 I-write-stuff-to-an-address-where-nothing-is-allocated 问题今天提早出现了。过于本地化,投票关闭。
-
@Lundin 是的,恐怕今天的日常生活中还有更多这样的问题...... -.-
-
我会使用
fread而不是fgets,因为cat实际上不需要使用换行符,这样我们就可以避免对长行进行特殊处理。
标签: c segmentation-fault