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++;
}
我不能为我的生活找出为什么我一直遇到一个段错误。即使没有循环,它也会出现故障(计数&lt; 1只是为了看看我是否可以通过一次)。
它不适用于fgets(),fscanf()。当我将fgets中的流更改为(stdin)时,它会出现故障,我提到这是因为我认为文件*是问题,但现在我认为不是。我在数据文件“”和“,”中创建了分隔符。
如果有人知道我做错了什么,我会很感激。
答案 0 :(得分:2)
您对fscanf
的呼叫保证会失败,因为您没有提供输出参数。它应该看起来像:
fscanf(inFilePtr, "%s", rawdata);
您对strtok
的来电也无效。要继续对同一字符串进行标记,strtok
的第一个参数应为NULL
; strtok
期望第二个参数仍然是有效的字符串。
这些问题中的每一个都会导致自身的段错误。为了便于将来调试,我建议使用调试器并在调试语句后设置断点,或者注释掉你可能期望segfault的其他行(通常包括任何对字符串做任何事情的行,如果你的代码处于脆弱状态。
另外,作为一种风格,
*(ary + counter)
通常是写的
ary[counter]
答案 1 :(得分:0)
尝试使用(char *)
转换malloc调用也许,只是:ary[counter++] = atof(strtok(rawdata, ","));