【发布时间】:2010-12-09 12:58:15
【问题描述】:
我正在尝试编写代码来反转字符串(我只是想在 C 编程和指针操作方面做得更好),但我不知道为什么我会收到 segmentation fault:
#include <string.h>
void reverse(char *s);
int main() {
char* s = "teststring";
reverse(s);
return 0;
}
void reverse(char *s) {
int i, j;
char temp;
for (i=0,j = (strlen(s)-1); i < j; i++, j--) {
temp = *(s+i); //line 1
*(s+i) = *(s+j); //line 2
*(s+j) = temp; //line 3
}
}
导致分段错误的是第 2 行和第 3 行。我知道可能有更好的方法可以做到这一点,但我有兴趣找出具体在我的代码中导致分段错误的原因。
更新:我已按要求包含调用函数。
【问题讨论】:
-
Segfault 几乎总是意味着您试图取消引用空指针。通过 GDB 运行您的代码,找到它在哪一行出现段错误,并查看那里的哪个指针为空 (0x000000)。
-
另外,为什么要使用两个变量(i 和 j)?你完全可以用 counter 做到这一点。
-
你能贴出创建 char* 并将其传递给 reverse() 的代码吗?
-
并且不要在循环条件中使用
strlen()。 -
@Carl Norum:如果你仔细看,上面代码示例中的循环条件中没有使用
strlen。
标签: c string segmentation-fault