1
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++;
        }

我一生都无法弄清楚为什么我总是遇到段错误。即使没有循环,它也会出现段错误(计数 < 1 只是为了看看我是否可以通过一次)。

它不适用于 fgets()、fscanf()。当我将 fgets 中的流更改为 (stdin) 时,它会出现段错误,我提到这一点是因为我认为文件 * 是问题,但现在我认为不是。我已经在我的数据文件“”和“,”中设置了分隔符。

如果有人知道我做错了什么,我将不胜感激。

4

2 回答 2

2

您的调用fscanf肯定会失败,因为您没有提供输出参数。它应该看起来像:

fscanf(inFilePtr, "%s", rawdata);

您的来电strtok也无效。要继续标记相同的字符串,第一个参数strtok应该是NULL; strtok期望第二个参数仍然是有效的字符串。

这些问题中的每一个都会自行导致段错误。为了简化您将来的调试,我建议您使用调试器并在您正在调试的语句之后设置断点,或者注释掉您可能希望出现段错误的其他行(如果您的代码通常包括对字符串执行任何操作的任何内容)处于脆弱状态。

另外,从风格上来说,

*(ary + counter)

一般写成

ary[counter]
于 2013-02-05T05:09:20.807 回答
0

尝试使用 (char *) 投射你的 malloc 调用

也许,只是也许:ary[counter++] = atof(strtok(rawdata, ","));

于 2013-02-05T05:30:24.150 回答