【发布时间】:2017-01-18 00:21:02
【问题描述】:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int foo(char str[])
{
char *str1=(char *)malloc(sizeof(char )*sizeof(str));
printf("\n str %s size : %zu \n",str,sizeof(str));
}
int main()
{
char str[]="879879879-=-=-@#$@#$abcd";
printf("\n str %s size : %zu \n",str,sizeof(str));
foo(str);
return 0;
}
为什么main() 和foo() 的字符串长度不同?
这是一个简单的程序,其中main 用str 调用foo — 相同的str 在main 中显示长度为25
在foo 8:为什么?
输出:
str 879879879-=-=-@#$@#$abcd size : 25
str 879879879-=-=-@#$@#$abcd size : 8
【问题讨论】:
-
在函数中,
char str[]等价于char *str,并且指针的大小小于您正在播放的特定字符串的大小。在主函数中,str是一个数组,sizeof报告数组的大小,包括终端空字节,这意味着sizeof(str) == strlen(str) + 1— 在main()内。 (请注意,您在foo()中泄漏了内存。) -
可能会有所帮助:c-faq.com/aryptr/index.html