黑马程序员技术交流社区

标题: C字符串输入的问题 [打印本页]

作者: 傘が咲く    时间: 2014-4-20 16:46
标题: C字符串输入的问题
本帖最后由 傘が咲く 于 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:}

作者: 傘が咲く    时间: 2014-4-20 18:27
马凯文 发表于 2014-4-20 18:03
我的正常呢
s1=d
s2=abcd

我用的vc++运行环境,难道是运行环境的问题么?
作者: heima-王鹏    时间: 2014-4-20 19:29
我试了在C++和Object-C两种编译器环境下的情况:
1,在C++编译器就会出现楼主刚才的问题
2,在OC环境下编译就是正常的




作者: 傘が咲く    时间: 2014-4-20 22:34
谢谢各位啦,我测试了不同的开发环境,确定是开发环境的原因




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2