我正在研究我的C / C ++技能。我试图实现一个反转字符串的函数,但每次运行程序时我都会遇到分段错误(核心转储)。
#include <stdio.h>
#include <string.h>
void revstr(char *str);
int main()
{
char *str = "hello mofo!";
revstr(str);
puts(str);
return 0;
}
void revstr(char *str)
{
int start = 0;
int len = strlen(str);
int mid = len / 2;
int i, t;
printf("start: %d, mid: %d,len: %d\n", start, mid, len);
for ( i = start; i < mid; ++i )
{
printf("str[%d] swapping to str[%d]: %c, %c\n", i, len - 1 -i, str[i], str[len - 1 - i]);
t = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = t;
}
}
这个解决方案也给了我相同的seg错误:
#include <stdio.h>
#include <string.h>
void revstr(char *str);
int main()
{
char *str = "hello mofo!";
revstr(str);
puts(str);
return 0;
}
void revstr(char *str)
{
char *end = str;
char t;
if ( str )
{
while ( *end != 0 )
end++;
end--;
while ( str < end )
{
t = *str;
*str++ = *end;
*end-- = t;
}
}
}
答案 0 :(得分:5)
char *str = "hello mofo!";
str
是字符串文字,它默认为const
,更改它是未定义的行为,您需要这样:
char str[] = "hello mofo!";