char *p = (char *)malloc(sizeof(char) * 10);
memcpy(p, "helloworld" , 10);
printf("%d", strlen(p));
也许每个记得C的人都会很快回答 10嘛.
可是事实呢,不妨你可以放到任何1个编译器里面,会发现很神奇的事情.
但是事实为什么与10差距这么大,而且会是1个根本搭不上关系的数字.
事实只能说明1点,初始化很重要.
按照本意,开辟10个空间,然后复制"helloworld"到里面,再显示他的长度.
但是strlen是检测'/0'做为结束符,那么开辟的空间为10个,后面第11个是否为'/0'谁也不能确定.
所以显示的结果自然没人确定.
我想在使用malloc与strlen时应该特别注意
正确的应该是:
char *p = (char *)malloc(sizeof(char) * 11);
memcpy(p, "helloworld" , 10);
*(p+11) = '/0';
printf("%d", strlen(p));