【发布时间】:2013-02-03 23:01:19
【问题描述】:
我正在复习我的 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;
}
}
这个解决方案也给了我同样的段错误:
#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;
}
}
}
【问题讨论】:
-
您不能修改文字。现在我已经给出了有用的建议,当你在实际代码中反转字符串时,请注意
std::reverse。 -
你需要展示你的作品。比如分段错误发生在哪一行?
-
谢谢,@chris,我知道
std::reverse,但我试图用 C 风格来做到这一点。