当前位置: 代码迷 >> C语言 >> 关于一个内存使用的问题
  详细解决方案

关于一个内存使用的问题

热度:33   发布时间:2008-01-14 21:53:24.0
关于一个内存使用的问题
char *str;
    str=(char *)malloc(sizeof(char));
    printf("%d\n",sizeof(char));这里只分配一个单元,后面为什么可以输入很多字符呢
    if(NULL==str)
    {
        printf("\nNo enough memory \n");
        exit(1);
    }
    printf("input the string:");
    gets(str);
    puts(str);
搜索更多相关的解决方案: 内存  str  char  printf  sizeof  

----------------解决方案--------------------------------------------------------
这个问题我也遇到不少
期待中
----------------解决方案--------------------------------------------------------
C 无法检测出这个错误,所以指针是危险的,
这是你对指针的了解不够。

指针是访问内存最直接的方式。

str 指向内存中的一个字节,内存是连续的,str 位置后面还有内存空间。但程序访问这些空间是一种不安全的行为。
----------------解决方案--------------------------------------------------------
gets() 接受一个char 指针参数。
----------------解决方案--------------------------------------------------------
回答的好像有道理.
----------------解决方案--------------------------------------------------------
我也来小分析一下:
char *str;//指向一个字符的地址,可以当数组用相当于str{};
    str=(char *)malloc(sizeof(char));开辟了一个char的空间,返回给str;
    printf("%d\n",sizeof(char));
    if(NULL==str)
    {
        printf("\nNo enough memory \n");
        exit(1);
    }
    printf("input the string:");
    gets(str);这里的意思是从上面开辟的char地址开始送一个字符串,但是str还是可以当数组用的,整个过程都没有做限制
    puts(str);得到字符串

[[italic] 本帖最后由 sunkaidong 于 2008-1-17 15:34 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
C代吗能通过编译 但实际上输入的其它字符已经存储在与它相临的地址空间
其它的地址如有数据(将被覆盖)
----------------解决方案--------------------------------------------------------
那怎么能用动态分存内存的方式控制输入的字符呢?
----------------解决方案--------------------------------------------------------
这就是为什么说gets不安全的原因
----------------解决方案--------------------------------------------------------
  相关解决方案