我编写了以下代码片段,但它不起作用。 谁能帮我?我哪里错了??
char *xstrrev(char *string)
{
int len=0,i=0;
char *reverse;
while(*string!='\0')
{
len++;
string++;
}
len=len-1;
while(len>=0)
{
*reverse=string[len];
reverse++;
len--;
}
*reverse='\0';
return reverse;
}
int main()
{
char name[10];
scanf("%s",name);
printf("%s",xstrrev(name));
return 0;
}
我无法在主函数中返回整个字符串
最佳答案
问题开始(和结束)于
*reverse=string[len];
其中 reverse
未初始化。这会调用 undefined behavior .
您需要初始化reverse
,使其指向有效内存位置,然后才能取消引用指针。
由于您希望从函数中返回新的字符串并在调用者中使用它,因此您应该使用内存分配器函数,例如 malloc()
在 malloc()
调用成功检查后分配内存并使用返回的指针初始化reverse
。使用完分配的内存后,您还需要处理free()
。
之后,根据您的逻辑,您将执行 reverse++;
,最后,您将返回 reverse
,因此请考虑确切的值:得到返回。您返回的是指向字符串结束的指针,而不是指向字符串开始的指针。您需要保留 reverse
实际开始的副本并将其返回。
关于c - 使用 Function 反转字符串并将整个字符串返回到主函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41328975/