【发布时间】:2014-04-12 05:40:39
【问题描述】:
#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。
#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;
}
【问题讨论】:
-
在写入之前需要为
input分配空间.. -
您要么需要使用
malloc为input分配一个指向某些内存的指针(当前没有有效的指针),要么将input声明为静态定义的空间,例如,char input[20];.
标签: c file segmentation-fault command-line-arguments tokenize