我目前正在学习C,而我正在开发一个程序,该程序使用一维数组来反转句子中单词的顺序。
它的运作方式如下:
输入:这是一个程序
输出:程序a是这个
但是当我尝试运行它时,我得到一个错误说"分段错误"我认为这意味着该程序试图访问它不应该的内存。
GDB告诉我问题出在我的循环中的printf
这是我的代码:
#include <stdio.h>
#define N 99
//initialize i at 1 to leave space in beginning
int i=1;
//j is for counting charachters of individual words
int j=0;
//initailize char array with spaces
char array[N]={' '};
int main(void)
{
printf("Enter a sentence ended by a [. or ! or ?]: ");
//enter sentence charachter by charachter into an array. end at terminator.
for (i=1 ; ; i++ )
{
array[i]=getchar();
if (array[i]=='.' || array[i]=='!' || array[i]=='?')
{
break;
}
}
//begin loop.
for ( ; array[i] != array[0] ; )
{
//note current position of i into j. j is end marker.
j=i;
//search backward from j for the beginning of last word (after a space).
for (i=j ; array[i]!= ' ' ; i--)
{
}
i++; //move to beginning of word
//print word to end counting places moved. stop at j.
for ( ; i!=j ; i++)
{
printf("%c", array[i]);
j++; //increment j to determine number of charachters.
}
//move back the same amount of places moved.
for ( ; j!=0 ; j--)
{
i--;
}
//i--; //move back once more
//update j to new position.
//start loop again.
}
return 0;
}
答案 0 :(得分:0)
for ( ; i!=j ; i++)
{
printf("%c", array[i]);
j++; //increment j to determine number of charachters.
}
在这个循环中是无限循环。因为你正在增加i和j两者。 所以,在这里j和i在任何时候都不会变得相同。 因此,只有您收到分段错误错误。