Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Sebug:字符指针_C++_C_Pointers_Char_Segmentation Fault - Fatal编程技术网

C++ Sebug:字符指针

C++ Sebug:字符指针,c++,c,pointers,char,segmentation-fault,C++,C,Pointers,Char,Segmentation Fault,可能重复: 运行一个非常简单的代码示例 #include <stdlib.h> #include <iostream> char* last_char(char* s){ char* last = s; while (*last) ++last; return last; } char* in_place_reverse(char* s) { char* left = s; char* right = last_char(s); char t

可能重复:

运行一个非常简单的代码示例

#include <stdlib.h>
#include <iostream>

char* last_char(char* s){
  char* last = s;
  while (*last) ++last;
  return last;
}

char* in_place_reverse(char* s) {
  char* left = s;
  char* right = last_char(s);
  char temp;

  while( left < right ) {
    temp = *left;
    *left = *right;
    *right = temp;

    left++;
    right--;
  }

  return s;
}

int main(){
  char * s = "letters\n";
  std::cout << in_place_reverse(s);
}
但从我的角度来看,我没有在代码中做任何违法的事情。 请帮我确定出什么问题了

p.S.我用

g++ example.c

您正在修改字符串文字,并且字符串文字不可修改

使用字符s[]=字母\n;相反,有两个问题:

您正在尝试修改字符串文字。这可能有效,也可能无效,也可能崩溃。这是在调用未定义的行为。使用char s[]=字母\n创建可变副本。 最后一个字符实际上返回一个指向字符串末尾的哨兵“\0”的指针-它指向最后一个字符以外的地方。将return last更改为return last-1。否则你也会移动哨兵,这几乎肯定不是你想要的。请注意,如果字符串长度为零,这将返回一个指向垃圾的指针。如果*s=='\0',您应该快速成功地进行就地\u反转,以避免这种复杂性。
您应该在调试器中运行此代码。它将告诉您是哪一行导致了seg错误,您应该能够从那里向后工作。请注意,您的函数last_char返回定界\0,因此如果您的代码不会出现seg错误,那么std::cout将不输出任何内容,因为字符串中的第一个字符在反转后将为\0。您确定是2吗?我单独测试了它,它总是返回最后一个字符。如果循环为while*last++,则返回“\0”;对last_char将仅在以下情况下返回last*最后的
g++ example.c