本帖最后由 风扫地 于 2018-3-22 17:49 编辑
1.char * str = "ABC";
这里开辟了"ABC"的空间,并且让str指针指向他,部分编译器会把“ABC”分配在静态区,只让读不让写,而你在reverse_str函数中用start 指针指向了"ABC"并且对这部分区域进行了写操作,涉及读写权限问题,不同环境不同编译器有不同规定比如你用的gcc编译出来就不让读,我用lcc编译又可以运行出结果,限于个人能力,无法展开叙述。
2.如果我们确定某段字符串只会用来读的时候,通常可以用char * str = "ABC";
如果我们不确定某段字符串只会用来读的时候,一般用字符数组存放,比如你这里可以这样定义:
char str[4] = "ABC";
此时 “ABC”分配在局部变量对应的栈中或者全局变量区中,可读可写。。不如改下试试
参考:
https://www.cnblogs.com/silence-hust/p/4487026.html
(1)错误的访问类型引起
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *c = "hello world";
c[1] = 'H';
}
上述程序编译没有问题,但是运行时弹出SIGSEGV。此例中,”hello world”作为一个常量字符串,在编译后会被放在.rodata节(GCC),最后链接生成目标程序时.rodata节会被合并到text segment与代码段放在一起,故其所处内存区域是只读的。这就是错误的访问类型引起的SIGSEGV。