《C库 — 字符串合并函数strcat 字符串常量导致程序崩溃》

1.例程

#include<stdio.h>
#include<string.h> int main(void) { char a[10]="123"; char b[10]="abc"; strcat(a,b); //连接两个字符串,连接后的字符串存袭放在a中,数组a中有足够空间 printf("%s",a); //输出连接后的字符串 }

2.错误例程

#include<stdio.h>
#include<string.h> int main(void) { char *a="123"; char *b="abc"; strcat(a,b); //连接两个字符串,连接后的字符串存袭放在a中,数组a中有足够空间 printf("%s",a); //输出连接后的字符串 }

  可以编译通过,但是运行的时候会提示段错误。

  问题原因:a和b都是字符串常量,属于只读(数据只读数据段),写只读数据段会发生权限问题的缺页中断,内核会发送SIG_SEGV信号终止进程(段错误),如果发生在内核空间会导致系统崩溃,。

 

原文地址:https://www.cnblogs.com/zhuangquan/p/12697857.html