Chinaunix

标题: 基础测试,sizeof和strlen的输出是什么? [打印本页]

作者: 蓝色键盘    时间: 2004-01-14 16:46
标题: 基础测试,sizeof和strlen的输出是什么?
不要上机测试,否则便没有什么意义。

如下程序的输出是什么?

  1. 在intel x86(32-bit) platform.

  2. #include <stdio.h>;

  3. int main( )
  4. {
  5.     char str[10];
  6.     char *p;

  7.     memset(str,0x00,sizeof(str));

  8.     p = (char *)malloc(100);

  9.     printf("%d\n",sizeof(p));
  10.     printf("%d\n",sizeof('p'));
  11.     printf("%d\n",strlen(str));

  12.     exit(0);
  13. }
复制代码

作者: 蓝色键盘    时间: 2004-01-14 16:48
标题: 基础测试,sizeof和strlen的输出是什么?
我留意了一下。10位面试者,只有一个人回答对了这个题目。

看来,还是CU的兄弟们水平高。
作者: win_hate    时间: 2004-01-14 16:48
标题: 基础测试,sizeof和strlen的输出是什么?
4
2
0
作者: win_hate    时间: 2004-01-14 16:50
标题: 基础测试,sizeof和strlen的输出是什么?
原帖由 "蓝色键盘" 发表:
我留意了一下。10位面试者,只有一个人回答对了这个题目。

看来,还是CU的兄弟们水平高。


偶们还没开始回答呢  

答错了一个
作者: seaglexiao    时间: 2004-01-14 16:50
标题: 基础测试,sizeof和strlen的输出是什么?
4
1
0
作者: stonemason    时间: 2004-01-14 16:52
标题: 基础测试,sizeof和strlen的输出是什么?
1
1
10
作者: ldap    时间: 2004-01-14 16:53
标题: 基础测试,sizeof和strlen的输出是什么?
4/1/0

版组什么公司,介绍我去吧,在Unix下干了3年多了。
作者: dysnake    时间: 2004-01-14 16:54
标题: 基础测试,sizeof和strlen的输出是什么?
4
1
0
没上机
作者: 亦非台    时间: 2004-01-14 16:55
标题: 基础测试,sizeof和strlen的输出是什么?
4
1
0
作者: 臭臭泥    时间: 2004-01-14 16:56
标题: 基础测试,sizeof和strlen的输出是什么?
4
1
0
作者: lonemoon    时间: 2004-01-14 16:57
标题: 基础测试,sizeof和strlen的输出是什么?
4
1
0
我在WINDOWS的VC++下编译需要
#include <string.h>;
#include <stdlib.h>;
你们那不需要吗?

答案是肯定没错的了
呵呵,好巧呀,我刚发了一个也是问这个的问题,看来可以从这得到答案了
可是有个问题:
如果不加memset(),第三行就会打出15(随机数),请问这是为什么?
作者: stonemason    时间: 2004-01-14 16:58
标题: 基础测试,sizeof和strlen的输出是什么?
Oh,还好我是业余爱好.....
安慰下自己。
作者: ldap    时间: 2004-01-14 17:02
标题: 基础测试,sizeof和strlen的输出是什么?
如果你不初始化的话,程序运行的时候只是在内存中,化出一块地方来,可能这个地方原来就有数据存在,健壮的程序应该首先初始化内存。对于动态分配的更应该如此。
作者: lonemoon    时间: 2004-01-14 17:07
标题: 基础测试,sizeof和strlen的输出是什么?
怎么没人回答我的问题      
作者: fieryfox    时间: 2004-01-14 17:15
标题: 基础测试,sizeof和strlen的输出是什么?
C是4 4 0,C++是4 1 0。sizeof('p')对于C和C++是不同的。
作者: ldap    时间: 2004-01-14 17:16
标题: 基础测试,sizeof和strlen的输出是什么?
[quote]原帖由 "lonemoon"]怎么没人回答我的问题      [/quote 发表:



当然需要,只是gcc缺省就带了。
作者: lonemoon    时间: 2004-01-14 17:19
标题: 基础测试,sizeof和strlen的输出是什么?
我在WINDOWS的VC++下编译需要
#include <string.h>;
#include <stdlib.h>;
你们那不需要吗?

答案是肯定没错的了
呵呵,好巧呀,我刚发了一个也是问这个的问题,看来可以从这得到答案了
可是有个问题:
如果不加memset(),第三行就会打出15(随机数),请问这是为什么?
作者: BingbingNorth    时间: 2004-01-14 17:22
标题: 基础测试,sizeof和strlen的输出是什么?
那斑竹不要招那些人了,招我们cu的兄弟吧,我先报名!
作者: lonemoon    时间: 2004-01-14 17:28
标题: 基础测试,sizeof和strlen的输出是什么?
如果不加memset(),第三行就会打出15(随机数),请问这是为什么?
作者: dysnake    时间: 2004-01-14 17:39
标题: 基础测试,sizeof和strlen的输出是什么?
memset函数是初始化分配的内存空间,使用0、0x00都是0即‘\0',不同系统当分配一块内存时,这块内存中的内容是未知的,系统只是根据申请者的要求为其化一块内存并不管他原先的内容是什么(有的系统清零),所以你的是随即数15。
作者: win_hate    时间: 2004-01-14 18:05
标题: 基础测试,sizeof和strlen的输出是什么?
哇, fieryfox  的答案才是正确的!

在 c 里头, 字符常量是整型。所以是 4。

如果 sizeof (char) 那应该就是 1.

fieryfox 兄,果然高手, 多多交流。
作者: lonemoon    时间: 2004-01-14 19:29
标题: 基础测试,sizeof和strlen的输出是什么?
[quote]原帖由 "dysnake"]memset函数是初始化分配的内存空间,使用0、0x00都是0即‘\0',不同系统当分配一块内存时,这块内存中的内容是未知的,系统只是根据申请者的要求为其化一块内存并不管他原先的内容是什么(有的系统清零),所以你的?.........[/quote 发表:


首先同意楼上的看法 :)
那也就是说这个15就是随机数了,看来我还是猜对了的,至于dysnake朋友说的memset这个函数我还是知道的,就是对这个15有点疑惑,呵呵现在我能确定自己想对了,谢谢你们!
作者: forest077    时间: 2004-01-14 19:35
标题: 基础测试,sizeof和strlen的输出是什么?
我的答案和很多人一样是4,1,0,有个同事答2,4,0,还有一个答100,0,0,呵呵,没人全对。但是第三个答案倒是没人答错,^_^
作者: 蓝色键盘    时间: 2004-01-15 09:20
标题: 基础测试,sizeof和strlen的输出是什么?
只有一个人回答正确了。
作者: BingbingNorth    时间: 2004-01-15 09:53
标题: 基础测试,sizeof和strlen的输出是什么?
也许把问题sizeof('p')改成sizeof(112)或者sizeof(0x70)就没人答错了。
作者: BlueFantast    时间: 2004-01-15 10:09
标题: 基础测试,sizeof和strlen的输出是什么?
等会哈,我是新手。我把我认为的答案和实际操作试一下啦,错了的话。。我这么菜原谅我吧,嘿嘿嘿嘿
我刚从Windows上转来的,请指教!!

4
4
0
作者: 蓝色键盘    时间: 2004-01-15 10:18
标题: 基础测试,sizeof和strlen的输出是什么?
[quote]原帖由 "BingbingNorth"]也许把问题sizeof('p')改成sizeof(112)或者sizeof(0x70)就没人答错了。[/quote 发表:


题目中设计为sizeof('p')是有目的的。如果连字符和指针都不能区分的话,答对这个题目又有什么意义
作者: seaglexiao    时间: 2004-01-15 10:46
标题: 基础测试,sizeof和strlen的输出是什么?
原帖由 "蓝色键盘" 发表:


题目中设计为sizeof('p')是有目的的。如果连字符和指针都不能区分的话,答对这个题目又有什么意义


还是请解释为什么 sizeof('p') 等于 4 吧!
作者: 蓝色键盘    时间: 2004-01-15 11:04
标题: 基础测试,sizeof和strlen的输出是什么?
原帖由 "seaglexiao" 发表:


还是请解释为什么 sizeof('p') 等于 4 吧!


sizeof操作符以字节形式给出了其操作数的存储大小。

在intel(32-bit)平台上,unix/cc/gcc环境中,char和int(一定范围的usigned int一样)。int的为4字节,看看int的存储大概你便能猜测char为多少了。

在intel(32-bit)平台上,如上的结果也不完全正确,windows/vc/c++Bld等环境,char、unsigned char或signed char,其结果都等于1。

对于指针而言,sizeof依赖于编译器。Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。对于unix平台,为4。
作者: fieryfox    时间: 2004-01-15 11:21
标题: 基础测试,sizeof和strlen的输出是什么?
应该是字符常量的sizeof的问题。C语言规定字符常量是int类型,C++语言规定字符常量是char类型。sizeof(char)就是1。
作者: seaglexiao    时间: 2004-01-15 11:36
标题: 基础测试,sizeof和strlen的输出是什么?
感谢各位老大指点,让我受益匪浅。
作者: Wangwen    时间: 2004-01-15 11:49
标题: 基础测试,sizeof和strlen的输出是什么?
4
1
0
作者: quil    时间: 2004-01-15 12:28
标题: 基础测试,sizeof和strlen的输出是什么?
原帖由 "蓝色键盘" 发表:


题目中设计为sizeof('p')是有目的的。如果连字符和指针都不能区分的话,答对这个题目又有什么意义



这里好像不是字符和指针的区别。
作者: bjf    时间: 2004-01-15 13:22
标题: 基础测试,sizeof和strlen的输出是什么?
100
1
0
作者: mills    时间: 2004-01-15 14:31
标题: 基础测试,sizeof和strlen的输出是什么?
好象是400,4,0啊
作者: mills    时间: 2004-01-15 14:37
标题: 基础测试,sizeof和strlen的输出是什么?
哦好象我上面写的不对搞错了应该是4,4,0刚刚糊涂了呵呵
因为定义时char *p;
所以p是4
而'p'是一个字符所以是4
str里面没有字符所以是0
sizeof好象返回是的定义时
strlen 是字符串的长度吧
作者: doni    时间: 2004-01-15 22:01
标题: 基础测试,sizeof和strlen的输出是什么?
4/1/0
作者: studymonkey    时间: 2004-01-16 23:55
标题: 基础测试,sizeof和strlen的输出是什么?
我觉得我现在看c都看不懂了,光看c++了。
作者: lonemoon    时间: 2004-01-17 00:04
标题: 基础测试,sizeof和strlen的输出是什么?
楼上的兄台不会吧,c++是c的扩展,c是面向过程,c++是面向对象,如果你每天用c++来写程序的话,不会看不懂这个的!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2