【发布时间】:2020-04-19 06:46:34
【问题描述】:
我在调试期间遇到此错误(*s = *end; line),同时尝试使用指针反转字符串。 我正在使用 Windows 10 操作系统、代码块 IDE 和 GDB 调试器。
#include <stdio.h>
#include <string.h>
#include <limits.h>
void myreverse(char* s);
int main()
{
char* s1 = "1234";
myreverse(s1);
printf("%s", s1);
return 0;
}
void myreverse(char* s) {
char tmp;
char* end = s + strlen(s) - 1;
for(; s < end; s++, end--) {
tmp = *s;
*s = *end;
*end = tmp;
}
}
【问题讨论】:
-
char* s1 = "1234";应该是const char* s1 = "1234";或char s1[] = "1234";如果你想改变它。 -
^^^^ 这会破坏你的构建,而不是像你现在那样调用 undefined behavior 。不要感到惊讶,这就是您在这种情况下想要的,因为它指出了真正的问题。然后,将
const char *s1 = "1234";更改为char s1[] = "1234";,然后再翻一遍。 -
看起来
*end = *s;应该是*end = tmp;。
标签: c++ segmentation-fault codeblocks