博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
strcat出现的问题
阅读量:4167 次
发布时间:2019-05-26

本文共 661 字,大约阅读时间需要 2 分钟。

  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)进行写操作,其结果是无定义的。(就是说不能到文字常量区去追加,这也就是为什么说""中的都是只读的)

转载地址:http://ydgxi.baihongyu.com/

你可能感兴趣的文章
《python基础教程》答案(第一章)
查看>>
2018.4.34
查看>>
2018.4.35
查看>>
2018.4.36
查看>>
我为什么要写博客
查看>>
如何导入pycharm无法导入的包
查看>>
2018.4.37
查看>>
2018.4.38
查看>>
2018.4.39
查看>>
2018.4.40
查看>>
2018.5.27
查看>>
2018.5.51
查看>>
2018.5.52
查看>>
《python基础教程》答案(第四章)
查看>>
2018.5.53
查看>>
2018.5.54
查看>>
2018.5.55
查看>>
2018.5.58
查看>>
2018.12.5
查看>>
2018.12.6
查看>>