如何正确反转字符串?
问题描述:
可能重复:
How to reverse a string in place in c using pointers?如何正确反转字符串?
我试图扭转使用C. 段故障发生的字符串。任何想法为什么?
这里是我的代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str1 = "abbd";
char *str2;
str2 = str2 + strlen(str1)-1;
while(*str1 != '\0')
*(str2--) = *(str1++);
printf("%s", str2);
return 0;
}
答
没有正确的分配(在声明或malloc中分配适当的长度),并且你没有真正移动字符串并检查你的条件是否合适(尝试str [i])。你唤醒了克拉肯。
答
看起来你并没有为STR2分配任何空间,刚才的指针。
答
char *str2;
str2 = str2 + strlen(str1)-1;
您声明了一个指针str2
,但将其值初始化为垃圾。 (str2 + ...
)
您是否试图进行就地修改?这对于此代码不起作用,char *foo="bar";
格式将"bar"
放置在支持该平台的写保护内存空间中。
您是否试图做一个不合适的修改?如果是这样,你忘了分配这个空间。
答
你没有为str2分配内存。
str2 = (char *)malloc(sizeof(char) * (strlen(str1) + 1));
我还没有尝试过,但似乎你会想设置STR2 = STR2 +的strlen(STR1),否则,我想你会跑出你的STR2的“前”缓冲区也是如此。
我建议把你的字符串当作数组来处理,让编译器为你做指针运算。
即使你找出分段错误,它也不会改变字符串。你能弄清楚为什么? – kindall 2012-03-31 01:15:55
即使您修复了大家指出的错误,也无法修改您的字符串,因为该字符串是不可修改的。你不能修改字符串文字。 – 2012-03-31 01:31:10