使用 printf("%s",..) 打印一个结构体,该结构体的第一个变量类型是 'char *',为什么能得到正确的字符串存储在 'char *' 中?

2024-03-15

在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(使用前将#替换为@)

使用 printf("%s",..) 打印一个结构体,该结构体的第一个变量类型是 'char *',为什么能得到正确的字符串存储在 'char *' 中? 的相关文章

随机推荐