【发布时间】:2013-01-19 23:08:12
【问题描述】:
int main( int argc, char** argv) {
FILE *inFilePtr = fopen(*(argv + 1), "r");
char *rawdata = malloc(sizeof(char) * 100);
float *ary = malloc(sizeof(float) * 50);
int counter = 0;
float averageAns;
int count = 0;
while (count < 1 ){
//fgets(rawdata, 50, inFilePtr); //I have tried both
fscanf(inFilePtr, "%s", rawdata);
*(ary + counter) = atof(strtok(rawdata, ","));
counter++;
*(ary + counter ) = atof(strtok(rawdata, NULL));
counter++;
*(ary + counter) = atof(strtok(rawdata, NULL));
counter++;
count++;
}
我终其一生都无法弄清楚为什么我总是遇到段错误。即使没有循环,它也会出现段错误(计数
它不适用于 fgets()、fscanf()。当我将 fgets 中的流更改为(stdin)时,它会出现段错误,我提到这一点是因为我认为文件 * 是问题,但现在我认为不是。我在数据文件“”和“,”中设置了分隔符。
如果有人知道我做错了什么,我将不胜感激。
【问题讨论】:
-
您可以使用 valgrind、gdb 或其他几种调试工具来帮助您...您尝试过其中任何一种吗?
-
还有,为什么不只是
ary[counter++] = atof(strtok(rawdata, NULL));? -
是的,我不是使用 gdb 的专家。它给了我一个没有帮助的错误代码。
-
你检查过 inFilePtr 不是 NULL 吗?
-
它不为空,我有一个 printf 语句打印 argv[1] 的值,它正在打印我期望的文件名,这也是无关紧要的,因为它不适用于标准输入要么。
标签: c segmentation-fault fgets