微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我想知道为什么 &a(Data type: char) 被打印为值而不是地址,使用 %s

如何解决我想知道为什么 &a(Data type: char) 被打印为值而不是地址,使用 %s

#include <stdio.h>

int main(void)
{

    char var = 'z';

    printf("[buf]: %s \n",&var); // the output is z~~~~~,but the first char of output is only z. why??
}

解决方法

转换说明符 s 旨在输出字符串(或其部分):以零字符 '\0' 结尾的字符序列。

要输出对象的地址,需要使用转换说明符 p

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    char s[] = "Hello";
    
    printf( "%s\n",s );
    printf( "%p\n",( void * )s );
    
    return 0;
}

程序输出可能看起来像

Hello
0x7ffc86fe4372

至于您问题中的代码,它具有未定义的行为,因为表达式 &var 不指向字符串,因为变量 var 的定义类似于

char var = 'z';

如果你想输出它的地址,那么你可以这样做

printf("[buf]: %p \n",( void * )&var);
,

%s 告诉 printf 接受指向字符串第一个字符的指针并打印该字符串,直到指示其结束的空字符为止。由于您传递的是单个字符的地址,printf 会打印该地址并继续在内存中查找要打印的更多字符,直到找到包含零的字节。对于 %s,当您传递指向单个字符的指针而不是由空字符终止的字符数组时,C 标准未定义该行为。

要打印地址,请使用 %p 并将指针转换为 void *

printf("%p\n",(void *) &var);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。