【发布时间】:2014-04-16 05:41:25
【问题描述】:
当我在 while 循环中调用 getField(char *line, int field) 函数时遇到分段错误,我不知道为什么。我正在尝试将一行传递给函数和一个列号,以便我可以从 csv 文件中的每一行中获取特定列并将它们打印到屏幕上。感谢您的意见。
void getField(char *line, int field);
int main(int argc, char *argv[]) {
if(argc < 3) {
fprintf(stderr, "Too few arguments \"%s\".\n", argv[0]);
}
if(atoi(argv[1]) < 1) {
fprintf(stderr, "First argument must be >= 1 \"%s\".\n", argv[1]);
}
FILE *fp = fopen(argv[2], "r");
if(fp == NULL)
fprintf(stderr, "Cannot open file %s\n", argv[0]);
char buf[80];
while(fgets(buf, 80, fp) != NULL) {
getField(buf, atoi(argv[1]); // seg fault is happening here
}
return 0;
}
void getField(char *line, int field) {
printf("here2");
//char *ln = line;
int column = field - 1;
int idx = 0;
while(column) {
//printf("here");
if(line[idx] == ',') field--;
idx++;
}
for(int j = idx; ; ++j) {
if(line[j] == ',') break;
printf("%s", line[j]);
}
printf("\n");
printf("%d", idx);
}
【问题讨论】:
-
段错误发生在哪一行?
-
你能运行 gdb 并发布 seg 错误的回溯吗?
-
在您的第一次测试中,您应该停止程序,如果没有足够的参数,则继续没有意义。
-
@merlin2011 它发生在调用 getField() 之前。它甚至没有调用它。
-
在 while 循环
while(column) ...中循环直到column不为零。但是你永远不会更新column。
标签: c