c - sprintf 的一件有趣的事

标签 c linux windows printf

我对 sprintf 很困惑,这是一个不同平台的有趣问题。 代码:

int main () 
{
    char sql[1024];
    uint32_t app_id = 32;
    uint64_t task_id = 64;
    sprintf(sql, "%u, %u", task_id, app_id);
    printf ("%s\n", sql);
    return 0;
}

控制台结果(MSVC2010调试/发布):64, 0

但在控制台(CentOS64 gcc4.4.6)中的相同代码:64, 32

任何人都会帮助我,谢谢!

------------已更新------------------------

谢谢大家。我读过这篇文章:sprintf for unsigned _int64

实际上,"inttypes.h" 中的PRIu64 定义:I64u,Windows 不支持。所以我可以这样写:

sprintf(sql, "%I64u, %I32u", task_id, app_id);

最佳答案

使用 %llu task_id 的格式字符串在 sprintf()如下:

sprintf(sql, "%llu, %u", task_id, app_id);
//             ^
//            for: long long unsigned int

编辑:@ Simonc建议最好使用:PRIu32PRIu64 <inttypes.h> 中定义的宏(因为你有 Linux 标签)喜欢:

sprintf(sql, "%"PRIu64", %"PRIu32"", task_id, app_id);
//               ^           ^
//       for:   uint64_t    uint32_t  

关于c - sprintf 的一件有趣的事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065203/

相关文章:

java - 如何支持 pro*c 应用程序的两阶段提交,该应用程序由外部 java 应用程序通过 JNI 调用使用?

c - 从文件 C 中读取数字列表

linux - 如何判断 Linux 守护进程的状态

c++ - 在 linux 和 Windows 机器上使用 C++ 调度任务

linux - 如何在运行时查找已安装和未安装分区的总大小和可用大小

mysql - 如何使我本地的 mySQL 数据库可以从不同的机器访问?

c - C中的条件语句和控制语句有什么区别吗?

c++ - 在 Windows 中使用 mingW-w64 编译 AEScrypt 时出错

windows - 回滚到以前的版本后获取完整的 git 日志

c - 许多客户端打印后,Arduino (Uno) 以太网客户端连接失败