【发布时间】:2014-04-25 12:34:08
【问题描述】:
第一个 printf 语句给出输出 3,第二个给出 20。 谁能解释一下这两者有什么区别?
char frame[20],str[20];
printf("\nstrlen(frame)= %d",strlen(frame));
printf("\nsizeof(frame) = %d",sizeof(frame));
谢谢:)
【问题讨论】:
-
一个是字符串的长度,另一个是指针的大小。这是基本的 C 知识 :)
-
@Stolas none 是指针的大小,尽管 one 是数组的大小。
-
strlen()evals content 在 run-time 进行计算。sizeof是在编译时推导出来的,并且与内容无关。 两者都包含在 C 语言的任何远程体面的文本中。 -
@Stolas ,除了没有评论,我的系统上的 sizeof 指针是 4。
-
@user3542109 当然,您的程序正在执行未定义的行为。您使用了不正确的格式说明符。
sizeof()计算为类型size_t,但您调用printf()告诉它该值是系统int。使用%zu作为第二个printf()。 两行都调用了UB(前者调用strlen()在一个内容不确定的缓冲区上,后者是因为我刚才说的原因)。