为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个字符串反转C代码会导致分段错误?

为什么这个字符串反转C代码会导致分段错误?

C++ C
慕莱坞森 2019-06-06 16:04:30
为什么这个字符串反转C代码会导致分段错误?我试图编写代码来反转字符串(我只是想更好地进行C编程和指针操作),但我不知道为什么我会得到一个分段故障:#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行。我知道也许有更好的方法来做这件事,但我想找出具体的在我的代码中导致分割错误。更新*我已按要求提供了调用功能。
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

您的代码可能因为以下几个原因而出现分段错误。以下是脑海中浮现的那些

  1. s为空。
  2. s指向保存在只读内存中的const字符串。
  3. s不为空终止。

我认为#2是最有可能的。你能告诉我们反向呼叫的地址吗?

编辑

基于你的样本#2绝对是答案。C/C+中的字符串文本不可修改。正确的类型实际上是const char*而不是char*..您需要做的是将一个可修改的字符串传递到该缓冲区。

快速示例:

char* pStr = strdup("foobar");reverse(pStr);free(pStr);


查看完整回答
反对 回复 2019-06-06
?
森栏

TA贡献1810条经验 获得超5个赞

你在测试像这样的东西吗?

int main() {
    char * str = "foobar";
    reverse(str);
    printf("%s\n", str);}

这使得str成为字符串文本,您可能无法编辑它(对我来说是分段错误)。如果你定义char * str = strdup(foobar)它应该很好(对我来说)。


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 586 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信