我正在努力解决学校的问题,这要求我将字符串转换到位(除其他外...)。我一直在努力解决这个问题,而且我没有想法......这是我的代码:
void strRev(char*s)
{
int i = 0;
int length = strlen(s);
char*rev = (char*)malloc((length+1)*sizeof(char));
strcpy(rev,s);
for(i;i<length;i++)
s[i] = rev[length - 1 - i];
printf("%s %s",rev,s);
}
int main()
{
char * test = "hello";
strRev(test);
}
当我在Visual Studio中单步执行时,它会在到达for循环内的行时挂起。 Unix给了我一个分段错误。我知道这一定是我想念的简单,但是我没有想法,网上的答案都没有帮助......而且我的时间已经不多了......有人请赐教,我做错了什么?
答案 0 :(得分:1)
好吧,你的代码没有到位(否则你不会使用malloc,为什么你还在使用sizeof(char)?)。
试试这个:
void strRev(char*s)
{
int i, len;
char tmp;
len = strlen(s);
for(i = 0; i < (len >> 1); ++i)
{
tmp = s[len - 1 - i];
s[len - 1 - i] = s[i];
s[i] = tmp;
}
}
然后根据评论建议修改你的main()。
答案 1 :(得分:1)
test
指向静态分配的缓冲区,不得修改。您可以通过分配s[i]=rev[...]
来修改它。这会导致段错误。
我想你想写rev[i]=s[...]
。
如果您需要这样做,那么动态("hello"
)或堆叠为strdup
分配内存。