[英]Segmentation fault (core dumped) when not using arguments
我可能会完全以错误的方式进行此操作,但是考虑到这样做只能供个人使用,如果效率不是可以的话。
当以./todo -r
身份./todo -r
,它可以工作。
当以./todo -a
身份./todo -a
,它可以工作。
当以./todo
身份./todo
,它给了我segmentation fault (core dumped)
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]) {
if(argc < 1) {
printf("Not enough variables.");
}
if(strcmp("-r",argv[1])==0) {
printf("\n");
system("cat .todo");
printf("\n");
}
if(strcmp("-a",argv[1])==0) {
char str[BUFSIZ];
FILE *f;
f = fopen(".todo","a");
printf("\n\nTODO list\n\n");
for(;;) {
printf("~ ");
fgets(str,256,stdin);
if(strcmp(str,"\n")==0) {
fclose(f);
printf("\n");
break;
}
fprintf(f,str);
}
return 0;
}
}
argv[0]
是程序可执行文件的名称,计入argc
。
因此./todo
具有argc=1
,但是argv[1]
为NULL,这将导致strcmp()
出现问题。
更改测试:
if (argc < 2)
{
printf("Not enough variables.");
return 0; // do this, otherwise we'll plough straight on..
}
正如其他人指出的那样,您需要argc < 2
而不是argc < 1
。
此外,您可能想从if
返回,以阻止其余部分执行:
if(argc < 2) {
printf("Not enough variables.");
return /* some appropriate value here */;
}
您正在关闭文件句柄,然后仍尝试对其进行写入:
if (...) {
fclose(...); <--potentially closing it, depending on the if() results
}
fprintf(...); <--potentially writing to a closed handle.
这是一个坏主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.