在C语言中,定义一个结构体如下:
typedef struct str
{
char *s;
int len;
}str;
int main()
{
str a;
a.s = "abc"
printf("%s", a);
return 0;
}
输出是:“abc”,我想知道为什么能得到这个?
我猜编译者认为printf("%s", a)
as printf("%s", *&a)
因为 a 等于 & as,所以 *& a 等于 *&a.s,对吧?
但如果是这样的话,如果我把int len
在结构体的第一个部分是这样的:
typedef struct str
{
int len;
char *s;
}str;
int main()
{
str a;
a.len = 10;
printf("%d", a);
}
这次输出是:10,为什么?
也许编译器读取 %d 所以它知道应该打印一个整数值,只打印 4 个字节?
我想得到一些关于它的解释。
你必须指定你想要打印哪个值,printf 和 C 一般无法猜测:)
typedef struct str
{
int len;
char *s;
}str;
int main()
{
str a;
a.len = 10; // As you did there, you specify which value from your struct !
printf("%d", a.len);
}
否则,这是未定义的行为,并且段错误即将到来!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)