#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;
}发布于 2014-03-09 11:30:40
没有分配内存@amdixon
// char* input;
#define N 1000
char* input = malloc(N);
do {
...
} while (strcmp(input, endof)!=0);
free(input);错误地使用fgets()
do {
// input=fgets(input, 20, stdin);
if (fgets(input, N, stdin) == NULL) break;
...
} while (strcmp(input, endof)!=0);可能是错误的endof字符串。
// char* endof="***END***";
char* endof = "***END***\n"; // Add \n for `fgets()`建议重写do while
while (fgets(input, N, stdin) != NULL) && strcmp(input, endof)!=0) {
...
}发布于 2014-03-09 11:23:49
char* input;
input=fgets(input, 20, stdin);您已经声明了input,但没有为它分配内存。
执行以下任一操作
char input[20];或
char * input;
input = malloc(20);https://stackoverflow.com/questions/22277810
复制相似问题