首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C分段故障11

C分段故障11
EN

Stack Overflow用户
提问于 2014-03-09 10:48:54
回答 2查看 337关注 0票数 0
代码语言:javascript
运行
复制
#include <stdio.h>
#include <string.h>

int numExperiment=1;

int main(int argc, const char * argv[])
{
    char* experiments[20];
    int data[10][20];
    char* input;
    char* endof = "***END***";

    do {
        input=fgets(input, 20, stdin);

        if (numExperiment%2 != 0) {
            experiments[numExperiment-1]=strdup(input);
        }
        else {
            int k=0;
            while ((data[k][numExperiment-1]=strsep(&input, " ") !=NULL)) {
               k++;
            }
        }

        numExperiment++;
    } while (strcmp(input, endof)!=0);
    return 0;
}

我写了这段代码,它编译没有问题,但当我运行它时,我总是得到这个错误:

“分段故障: 11”。

这段代码应该做的是读取一个文件,并将奇数行上的所有数据放到一个数组中,而将数据放在二维阵列上的偶数行上。我正在使用命令行重定向来读取文件。

如果有人能给我指出正确的方向来纠正这个问题,那就太好了。

编辑1:关于内存和fgets的分配,我做了以下建议的更改,但我仍然收到分段错误11。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 1000

int numExperiment=1;

int main(int argc, const char * argv[])
{

    char* experiments[20];

    int data[10][20];
    char* input=malloc(N);
    char* endof="***END***\n";


    do {




        if (fgets(input, N, stdin) == NULL) break;


        if (numExperiment%2 != 0) {
        experiments[numExperiment-1]=strdup(input);
        }

        else {
            int k=0;
            while ((data[k][numExperiment-1]=strsep(&input, " ") !=NULL)) {
                k++;
            }


        }


        numExperiment++;



    } while ((fgets(input, N, stdin) != NULL) && (strcmp(input, endof)!=0));

    free(input);




    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2014-03-09 11:30:40

没有分配内存@amdixon

代码语言:javascript
运行
复制
// char* input;
#define N 1000
char* input = malloc(N);
do {
   ...
} while (strcmp(input, endof)!=0);
free(input);

错误地使用fgets()

代码语言:javascript
运行
复制
do {
  // input=fgets(input, 20, stdin);
  if (fgets(input, N, stdin) == NULL) break;
   ...
} while (strcmp(input, endof)!=0);

可能是错误的endof字符串。

代码语言:javascript
运行
复制
// char* endof="***END***";
char* endof = "***END***\n";  // Add \n for `fgets()`

建议重写do while

代码语言:javascript
运行
复制
while (fgets(input, N, stdin) != NULL) && strcmp(input, endof)!=0) {
   ...
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-09 11:23:49

代码语言:javascript
运行
复制
char* input;
input=fgets(input, 20, stdin);

您已经声明了input,但没有为它分配内存。

执行以下任一操作

代码语言:javascript
运行
复制
char input[20];

代码语言:javascript
运行
复制
char * input;
input = malloc(20);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22277810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档