bug积累

[复制链接]
发表于 2026-2-10 23:59:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.只写 int p[len1 + len2]; 时,实际上是在利用 C99 尺度中引入的变长数组(VLA, Variable Length Array)的特性。变长数组允许在栈上分配其巨细在运行时确定的数组。这意味着 len1 和 len2 的值可以在步调运行时确定,但仍然可以用来声明数组 p 的巨细。假如 len1 + len2 的值非常大,大概会导致栈溢出,由于变长数组是在栈上分配的。变长数组不能被初始化,由于编译器在编译时不知道数组简直切巨细,因此无法为数组分配初始值。这就是为什么 int p[len1 + len2] = {}; 会报错的缘故起因。
  1.     int p[len1 + len2] = {};//报错 不能直接定义
  2.     int p[len1 + len2];
复制代码

  • ch2[len] = ‘\0’;//必要在字符数组背面添加,否则会出现垃圾值,不会主动补全字符数组,必要本身手动添加 ‘\0’。
  1. #include <stdio.h>
  2. /*12. 把一个字符串所有内容反转
  3.         如: hello world 结果: dlrow olleh*/
  4. int main()
  5. {
  6.     char *ch1 = "hello world";
  7.     int len = strlen(ch1);
  8.     char ch2[len+1];
  9.     for (int i = 0; i < len; i++)
  10.     {
  11.        ch2[i] = ch1[len-1-i];
  12.     }
  13.     ch2[len] = '\0';//需要在字符数组后面添加,不然会出现垃圾值
  14.     printf("%s",ch2);
  15.     return 0;
  16. }//输出结果dlrow olleh
复制代码

  • 这两句声明确两种差别范例的变量,它们之间的紧张区别在于它们所指向的内存范例和利用方式。static char *info 它是一个指针变量,利用时只能改变指向,但是不能改变数据;static char info[20],而它不可以改变指向,但是可以改变内里存储的数据。如许是字符数组和字符串的区别。
  1. char * get_dog_info( struct Dog * dog){
  2.     // static char *info;报错
  3.     static char info[20];
  4.     sprintf(info,"狗的id为%d,名字%s,体重为%lf,年龄为%d",dog->id,dog->name,dog->weight,dog->age);
  5.     return info;
  6. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表