gpt4 book ai didi

c - 为什么我的 C 函数中会出现段错误,该错误会反转字符串中的单词顺序?

转载 作者:行者123 更新时间:2023-11-30 20:57:11 25 4
gpt4 key购买 nike

这是我的函数,应该翻转一个字符串,例如“今天是美好的一天”输入“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);
}

最佳答案

printf("%s\n",buf[0]); 中,您将字符而不是字符串传递给 printf,这将导致段错误。请改用 printf("%s\n", buf);

此外,您没有正确复制单词,在 buf[c]=str[i[j]+c]; 中,c 不是距当前单词开头的偏移量,而是距buf 的开头,您应该使用另一个计数器作为偏移量。

l = 0;
while(buf[c]!='\0'){
c++;
l++;
buf[c]=str[i[j]+l];
}

关于c - 为什么我的 C 函数中会出现段错误,该错误会反转字符串中的单词顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12740462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com