我不明白为什么我会用这么少量的代码得到一个段错误。我不知道是strcmp还是fgets这是导致问题的原因。我已经和他一起工作了两天,原谅我的沮丧。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE* input;
char line[40];
printf("%s\n", argv[1]);
if ((strcmp(argv[1], "-f")) == 1)
{
printf("Inside first if statement\n");
input = fopen(argv[2], "r");
if(input == NULL)
{
printf("Could not open file\n");
exit(-1);
}
}
while ((fgets(line, 40, input)) != NULL)
{
//printf("%s\n", input_line);
}
return 0;
}
答案 0 :(得分:4)
if ((strcmp(argv[1], "-f")) == 1)
应该是:
if (strcmp(argv[1], "-f") == 0)
答案 1 :(得分:1)
您可能需要执行以下操作:
这是您的代码,已修订并正常工作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int usage()
{
printf("usage: %s -f <file>\n",argv[0]);
}
int main(int argc, char* argv[])
{
FILE* input;
char line[+1]; //allow room for NULL terminator
if (argc < 3 || strcmp(argv[1], "-f") ) { usage(); exit(1); }
printf("file: %s\n", argv[2]);
if( (input = fopen(argv[2], "r")) == NULL)
{
printf("open %s\n",argv[2]);
exit(2);
}
//ask C how big line[] is
while ( fgets(line, sizeof(line), input) != NULL )
{
//line[sizeof(line)-1] = '\0'; //fgets does this for us
printf("%s\n", line);
}
return 0;
}
顺便说一句:* EXIT_SUCCESS和EXIT_FAILURE的使用稍微便宜一些 非UNIX环境)比使用0和一些非零值(如1) 或-1。*