2012-03-31 128 views
-2

可能重复:
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; 
    } 
+0

即使你找出分段错误,它也不会改变字符串。你能弄清楚为什么? – kindall 2012-03-31 01:15:55

+0

即使您修复了大家指出的错误,也无法修改您的字符串,因为该字符串是不可修改的。你不能修改字符串文字。 – 2012-03-31 01:31:10

回答

0

没有正确的分配(在声明或malloc中分配适当的长度),并且你没有真正移动字符串并检查你的条件是否合适(尝试str [i])。你唤醒了克拉肯。

0

看起来你并没有为STR2分配任何空间,刚才的指针。

0
char *str2; 
str2 = str2 + strlen(str1)-1; 

您声明了一个指针str2,但将其值初始化为垃圾。 (str2 + ...

您是否试图进行就地修改?这对于此代码不起作用,char *foo="bar";格式将"bar"放置在支持该平台的写保护内存空间中。

您是否试图做一个不合适的修改?如果是这样,你忘了分配这个空间。

0

你没有为str2分配内存。

str2 = (char *)malloc(sizeof(char) * (strlen(str1) + 1)); 

我还没有尝试过,但似乎你会想设置STR2 = STR2 +的strlen(STR1),否则,我想你会跑出你的STR2的“前”缓冲区也是如此。

我建议把你的字符串当作数组来处理,让编译器为你做指针运算。