我正在尝试在 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
不分配内存:
while (gets(s)){
puts(s);
}
首先使用 malloc
分配一些内存(稍后您必须free
):
char *s = malloc(some_buffer_size);
或修复它:
char s[some_buffer_size];
小心 gets
顺便说一句,因为无法限制输入的字符数,这可能导致缓冲区溢出。使用fgets(buf, sizeof(buf), stdin)
相反。
第二个错误已被别人指出,不能调用fopen
像这样,用这个代替,或者使用 H2CO3 的解决方案:
FILE *file = fopen( argv[1], "r" );
关于c - 从命令行读取参数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16030176/