A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 傘が咲く 高级黑马   /  2014-4-20 16:46  /  1145 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 傘が咲く 于 2014-4-22 17:00 编辑
  1. #include <stdio.h>

  2. void test1()
  3. {
  4.         char s1[] = "itheima";
  5.         char s2[3];
  6.         gets(s2);
  7.         printf("s2=%s\n",s2);
  8.         printf("s1=%s\n",s1);
  9. }

  10. int main()
  11. {
  12.         test1();
  13.         return 0;
  14. }
  15. /*
  16.         输入 abc
  17.         输出 s2=abc
  18.                s1=itheima

  19.         输入 abcd
  20.         输出 s2=abcd
  21.                s1=    ---->这里的位置被'\0'取代。
  22. */
复制代码


问:  gets或scanf函数在读入字符串,往字符数组里存的时候会自动在尾部添加'\0',为什么我定义的字符数组长度是3,而s1内存溢出的临界值是4个字符?  求解!{:3_67:}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
马凯文 发表于 2014-4-20 18:03
我的正常呢
s1=d
s2=abcd

我用的vc++运行环境,难道是运行环境的问题么?
回复 使用道具 举报
我试了在C++和Object-C两种编译器环境下的情况:
1,在C++编译器就会出现楼主刚才的问题
2,在OC环境下编译就是正常的



评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
谢谢各位啦,我测试了不同的开发环境,确定是开发环境的原因
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马