c - printf %p 返回值

标签 c printf

当我使用printf %p打印内存地址时,我得到十六进制形式的地址 - 类似于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);
}

output:

0x7ffeea6a3790

16

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

文档说:

printf() : It returns total number of Characters Printed, Or negative value if an output error or an encoding error. ...

最佳答案

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

根据您的评论,您说您的输出为 15,并且您使用的是 MacOS。因此,打印地址为 14,换行符为 1,这就是预期的结果。

关于c - printf %p 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215013/

相关文章:

c - 交换数组内的奇数和偶数,C

c - 如何删除字符串中的第一个条目

c - Clang 5.0 上的 vsprintf 和 vsnprintf [-Wformat-nonliteral] 警告

c++ - this_thread::sleep_for 早睡

汇编中的C变量使用,如何在arm aarch64中选择32位操作数

c - 我在我的复数代码中收到 'expected expression'错误

c - 需要返回什么 HTTP header 以便 Web 浏览器使用建议的文件名? (文件从 CGI 中下载)

c - 使用非阻塞 MPI 函数发送矩阵的问题

java - System.out.printf() 用于 float 数据类型

c - 将两位数字打印为字符