我试图使用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 :(得分: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])。你已经唤醒了海妖。