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