这是我的功能,应该翻转一个字符串,如"今天是美好的一天" 进入" day beautiful a is Today"我的nextword函数(在flipstring函数内)返回字符串中每个单词的开头的索引,并且还会放置' \ 0'在这个词之后。当我使用该函数时得到错误,分段错误(核心转储),我无法弄清楚原因。
void flip(char *str)
{
// reverse the order of the words
char buf[256];
int i[2],k,j=0,c=0;
//set k to the index of the first word in str
k = nextword(str);
//Create an array (i) of the index of the beginning of every word
//nextword also places a '\0' after every word in str
while ( k != -1)
{
i[j] = k;
j++;
k = nextword(NULL);
}
//place each word in buf in reverse order
//replace the eos with a space
for ( j=j-1 ; j >= 0 ; j--) //starts with index of last word in string str
{
buf[c]=str[i[j]];
while(buf[c]!='\0')
{
c++;
buf[c]=str[i[j]+c];
}
buf[c] = ' '; //replaces '\0' after every word with a space
c=c+1;
}
buf[c] = '\0'; //Places eos at the end of the string in buf
printf("%s\n",buf[0]);
}
来电,
void main(void)
{
char str[] = "Today is a beautiful day!\t\n";
flip(str);
//printf("%s",str);
}
答案 0 :(得分:2)
在printf("%s\n",buf[0]);
中,您将字符传递给printf而不是字符串,这会导致分段错误。请改用printf("%s\n", buf);
。
你也没有正确地复制单词,在buf[c]=str[i[j]+c];
中c不是从当前单词开头的偏移量,而是从buf的开头,你应该使用另一个计数器作为偏移量。 / p>
l = 0;
while(buf[c]!='\0'){
c++;
l++;
buf[c]=str[i[j]+l];
}
答案 1 :(得分:0)
检查此说明:
buf[c]=str[i[j]+c];
c是一个在函数开始时初始化为0的计数器,并且您正在混合使用此计数器来设置buf的位置并设置str的位置。这条指令很奇怪,它可能会导致你的分段错误。
尝试使用2个不同的计数器,1表示buf,1表示str。