strcat出现的问题

  1. #include <string.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.         char            s1[] = "hahaha";
  6.         char            *s2 = "*******/n";
  7.         strcat(s1, s2);
  8.         printf("S1 bytes = %d/n"sizeof(s1));
  9.         printf("s1 = %s", s1);
  10.         return 0;
  11. }

当s2增加字节数时,为什么会出现段错误?

char  s1[] = "hahaha";这样申明的变量"hahaha"是只读的(文字常量区),但s1在栈区是将字符都复制过去了。

 

char s1[] = {'h', 'a', 'h', 'a', 'h', 'a', '/0'};
char s1[] = "hahaha";
char s1[7] = {'h', 'a', 'h', 'a', 'h', 'a', '/0'};
char s1[7] = "hahaha";

这里的等号不是简单的赋初值,而是将字符串里的内容复制到数组中。对象的实质仍然是 char 数组

这个数组容量有限,对其进行 strcat() 将溢出。
解决的方法:申请一个更大的数组,显式指定它的容量。如s1[10000]

 

s1为什么不能是char *s1= "hahaha";

s1是指针,指向 "hahaha" 这个字符串常量。对字符串字面值(string literals)进行写操作,其结果是无定义的。(就是说不能到文字常量区去追加,这也就是为什么说""中的都是只读的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值