如何正确反转字符串?

时间:2012-03-31 01:13:59

标签: c

  

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

4 个答案:

答案 0 :(得分:0)

看起来你没有为str2分配任何空间,只是做了指针。

答案 1 :(得分:0)

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

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

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

您是否尝试进行不合适的修改?如果是这样,你忘了分配那个空间。

答案 2 :(得分:0)

你没有为str2分配内存。

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

我还没有尝试过,但似乎你想要设置str2 = str2 + strlen(str1),否则我认为你也会跑掉str2缓冲区的“前端”。

我建议将字符串视为数组,让编译器为您执行指针运算。

答案 3 :(得分:0)

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