542971618 发表于 2011-11-27 15:57:57

风扫地 发表于 2011-11-27 16:02:45

本帖最后由 风扫地 于 2011-11-27 16:12 编辑

1. strlen的原理就是从第一个位置开始计数直到遇到'\0'。
2. malloc分配内存时并不将所分配的内存清零。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
      char *s="1234567890";
                s=0;
      printf("s的长度=%d\n",strlen(s));
                s=1;
      char *str=(char *)malloc(strlen(s));
                for(int i=0;i<9;i++)
                        {
                                str=1;
                        }
                str=0;
      printf("str的长度=%d\n",strlen(str));
}




542971618 发表于 2011-11-27 16:46:06

风扫地 发表于 2011-11-27 18:02:24

本帖最后由 风扫地 于 2011-11-27 18:10 编辑

542971618 发表于 2011-11-27 16:46 static/image/common/back.gif
我不是很明白,能具体解释下么?   而且你的程序FC了
FC是什么意思?如果编译不过。
保存为.cpp文件来编译上面的程序

542971618 发表于 2011-11-27 18:16:17

风扫地 发表于 2011-11-28 15:24:09

我的代码和你帖子那段绿字不是一个意思?。。。;P


【已解决】malloc函数是动态分配内存的,也就是用malloc分配的内存中的内容是不确定,可能在strlen(s)长度范围内存在'\0',也可能在strlen(s)之外存在'\0',而恰巧strlen()函数查的就是'\0'之前字符的个数,而且每个人的电脑这个'\0'的位置都不一样,所以最后的结果也不确定。

542971618 发表于 2011-11-28 16:15:15

追梦1航海 发表于 2014-3-14 20:53:56

不错不错,解释的很好!!!!!!!1

oggplay 发表于 2014-3-14 23:54:44

其实C 语言里有个很牛的函数 mmap(),不过它太低级了。不过用处很大:sleepy:
页: [1]
查看完整版本: 关于malloc的一个小问题,很简单的思路,就是不能得到正确的结果