gpt4 book ai didi

c - 当一个字符传递给 printf 函数时,如何将其提升为 int?

转载 作者:行者123 更新时间:2023-11-30 18:12:42 25 4
gpt4 key购买 nike

char getstr()
{
static char s[]="GATE2016";
return s;
}

int main()
{
printf("%s",getstr());
return 0;
}

虽然我知道我正在使用字符返回类型返回地址,并且返回类型必须是 char* getstr ();

但是,如果我确实这样做,那么我会在 gcc 编译器上得到 null,在另一个编译器上得到段错误,这意味着 getstr 函数中的 32 位地址值将被转换为 8 位的 char 值,因此当我用 %s 打印该值时,它应该是一个未定义的行为,而不是为什么它会给出段错误,这显然意味着这个 8 位值必须已扩展为 32 位值,那么这种隐式转换是如何发生的呢?

最佳答案

我不太明白你的问题。

我尝试了这段代码(稍作修改):

char getstr()
{
static char s[]="GATE2016";
printf("in getstr : %p\n", s);
return s;
}

int main()
{
printf("in main : %p\n",getstr());
return 0;
}

我明白了

in getstr : 0x601040
in main : 0x40

我们可以看到,正如预期的那样,getstr 只传递了一个字节。

无论如何,许多 printf 实现都使用 va_args ,并且 va_args 将每个 charshort 转换为 int。这就是您最终得到 32 位变量的方式。

关于c - 当一个字符传递给 printf 函数时,如何将其提升为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32473061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com