C printf%p返回值

C printf%p返回值,c,printf,C,Printf,当我用printf%p打印内存地址时,我得到的地址是hexdecimal——类似于0x7ffee35f5498。我想知道为什么printf返回值是16,而不是字符串的实际长度,在本例中是14 #include <stdio.h> int main(void) { char *s = "Hello World!"; int x; x = printf("%p\n", (void*)&s); printf("%d\n", x); return (0); } #

当我用
printf%p
打印内存地址时,我得到的地址是
hexdecimal
——类似于
0x7ffee35f5498
。我想知道为什么
printf
返回值是
16
,而不是字符串的实际长度,在本例中是
14

#include <stdio.h>

int     main(void)
{
char    *s = "Hello World!";
int x;

x = printf("%p\n", (void*)&s);
printf("%d\n", x);
return (0);
}
#包括
内部主(空)
{
char*s=“你好,世界!”;
int x;
x=printf(“%p\n”,(void*)&s);
printf(“%d\n”,x);
返回(0);
}
输出:

0x7ffeea6a3790

十六,

地址有14个字符,但函数返回16个字符

文件说明:

printf():返回打印的字符总数或负数 值(如果输出错误或编码错误…)


你不仅要打印地址,还要在地址后面加一个换行符。在Linux/MacOS系统上,换行符是一个字符(0xA),而在Windows系统上是两个字符(0xD 0xA)


从你的评论中,你说你的输出是15,你在MacOS上。因此,打印地址为14,换行符为1,这是预期结果。

是否有空格或换行符?至少显示实际的函数调用..换行符也被计数,所以应该是15。不确定另一个字节。您的代码打印的是
15
,而不是
16
。您的平台、编译器、ide等是什么?您如何编译和运行该程序?字符串的实际长度为14+1=
15
,+1,因为
\n
当然也算作一个字符。您正在运行的代码实际上是您在问题中发布的代码吗?@user253751这一点很好,但至少在我的Visual Studio 2019安装中,
\r
未计算在内,并且输出是正确的。