我有这段代码,当我编译它时,它在第一个printf之后显示Segmentation Fault。
我不知道是什么原因造成的。请帮忙。谢谢。
int main()
{
char puzzle[7][7];
char input[7];
int i;
int j;
int a;
printf("Enter your Tentaizu Puzzle:\n");
while (input[a] = '\n') {
scanf("%c", &input[a]);
a++;
}
for(i = 0; i < strlen(input); a++) {
j = 0;
while (j < 7) {
if (input[a] != ' ') {
puzzle[i][j] = input[a];
j++;
}
}
a++;
}
return 0;
}
样品输入
。 2。 。 。 。 。
1。 。 。 。 1。
。 。 1 2 。 2
。 。 4 3。 。 。
。 。 。 。 。 3。
1。 。 。 1。 。
。 。 。 。 。 。 。
最佳答案
这么多问题...我用!!
注释更新了您的代码。我不清楚您实际上要完成什么。根据您的描述,一次只能读取一行输入,并且所有非空格字符都将放入数组中。现在,代码将检查包含太多和更少项目的行。
int main()
{
char puzzle[7][7];
char input[256]; // !! Room for 49 chars, spaces and NUL
char *p;
int x, y;
printf("Enter your Tentaizu Puzzle:\n");
for (y = 0; y < 7; y++) {
// !! use fgets to read a line; it will NUL terminate the string, and not overflow the buffer !!
if (fgets(input, sizeof(input), stdin) == NULL) {
perror("fgets");
exit(1);
}
// !! don't call strlen when scanning, just check for NUL terminator, and increment i instead of a !!
for(x = 0, p = input; *p; p++) {
// !! what was a had the same value as i, so we only need i !!
// !! filter out the newline that fgets might leave !!
if (!isspace(*p)) {
if (x < 7) {
puzzle[x++][y] = *p;
}
else {
printf("line too long\n");
exit(1);
}
}
}
if(x < 7) {
printf("line too short\n");
exit(1);
}
}
for(y = 0; y < 7; y++) {
for(x = 0; x < 7; x++) {
printf("%c ", puzzle[x][y]);
}
printf("\n");
}
return 0;
}
关于c - C中的SegFault错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22495531/