《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信号终止进程(段错误),如果发生在内核空间会导致系统崩溃,。

 

 

posted @ 2020-04-14 14:29  一个不知道干嘛的小萌新  阅读(515)  评论(0编辑  收藏  举报