我是学习C语言的新手,需要帮助在使用gcc编译代码后从命令行读取多个文件。例如,如果我的代码被编译并且输出是a.out,它应该像a.out FILEA FILEB
一样运行到目前为止这是我所拥有的但是当我尝试添加另一个循环来读取另一个文件时FILEB
我得到了分段错误,这个错误来自哪里?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void evalFile(char *s);
int main(int argc, char* argv)
{
FILE *fp1, *fp2;
if (argc != 3)
{
printf("./progName fileName1.csv fileName2.txt");
}
fp1 = fopen(argv[1], "r");
fp2 = fopen(argv[2], "r");
while(fgets(buffer, sizeof(buffer), fp1) != NULL)
{
if(buffer[0] == "#")
continue;
evalFile(buffer);
}
}
void evalFile(char *s)
{
char *token, *del="(,)";
token = strtok(s, del);
while(token != NULL)
{
token = strtok(NULL, del);
}
}
答案 0 :(得分:2)
您写道:
fp1 = fopen(argc[1], "r");
fp2 = fopen(argc[2], "r");
您的命令行参数存储在 argv 中,而不是 argc ! 他们是非常不同的。
你想要
fp1 = fopen(argv[1], "r"); // argv, not argc
fp2 = fopen(argv[2], "r"); // argv, not argc
答案 1 :(得分:1)
int main(int argc, char* argv)
argv
是一个char指针数组,在你的情况下它只是一个char指针。将其更改为
int main(int argc, char* argv[])
另外,你有一个拼写错误 - 没有这样的C函数frets
。你的意思是fgets
。
功能原型:
evalFile(char *s);
前面应该有void
。 void evalFile(char *s);
这是什么 - *del(,);
?我想你想要声明一个分隔符,它将与strtok
一起使用。将其更改为char* del = ",";
未定义buffer
变量。你正在阅读fgets
无处可读的字符串。
你想比较你的while循环中的单个字符。变化
if(buffer[0] == "#")
到
if(buffer[0] == '#')