我有一个分配问题。我应该递归地将一个字符串反转成另一个空字符串。问题是该函数修改了它不应该做的源字符串,只是将字符串向后复制到目标字符串。我不明白为什么会这样......
#include <stdio.h>
#include <string.h>
void
invert(const char *src, char dest[])
{
if(*src=='\0')
return;
else
{
invert(src+1, dest);
dest[strlen(src)-1]=*src;
}
}
int main(int argc, const char * argv[])
{
char dest[]="";
char src[]="";
printf("write a word: \n");
scanf("%s", src);
invert(src, dest);
dest[strlen(src)]='\0';
printf("the inversion of the word is: %s\n", dest);
return 0;
}
例如:写Ulysses =&gt; sessesU 并写作琼斯=&gt; seesJ \ 377
答案 0 :(得分:4)
问题在于:
char dest[]="";
char src[]="";
你要分配两次一个字符 - 变量可能在堆栈上彼此相邻,这就是为什么写一个字段会错误地覆盖另一个字符的内容。
您应该为字符串分配足够的存储空间。如果您确定程序的输入永远不会超过例如1023字节,那么两个1k缓冲区应该是好的:
char src[1024], dest[1024];