Osu*_*ldo 0 c++ segmentation-fault
我正在研究我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案也给了我相同的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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
char *str = "hello mofo!";
Run Code Online (Sandbox Code Playgroud)
str是字符串文字,它是默认的const,改变它是未定义的行为,你想要这样:
char str[] = "hello mofo!";
Run Code Online (Sandbox Code Playgroud)