当前位置: 首页 > 面试题库 >

sprintf的有趣之处

宋耀
2023-03-14
问题内容

我对sprintf感到非常困惑,以至于不同的platfrom出现了一个有趣的问题。代码:

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

有人会帮助我的,tks!

- - - - - - -更新 - - - - - - - - - - - - -

实际上,PRIu64"inttypes.h"indefined中:I64uWindows不支持。所以我可以这样写:

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

问题答案:

使用%llu格式字符串task_idsprintf(),如下所示:

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

编辑:@ @Simonc建议更好地使用:PRIu32和(由于具有Linux标记)中PRIu64定义的宏<inttypes.h>类似:

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


 类似资料:
  • 描述 (Description) 此函数使用FORMAT根据LIST中的值返回格式化字符串。 基本上与printf相同,但返回格式化的字符串而不是打印。 语法 (Syntax) 以下是此函数的简单语法 - sprintf FORMAT, LIST 返回值 (Return Value) 此函数返回SCALAR,一种格式化的文本字符串。 例子 (Example) 以下是显示其基本用法的示例代码 -

  • sprintf(格式化字符串复制) 相关函数 printf,sprintf 表头文件 #include<stdio.h> 定义函数 int sprintf( char *str,const char * format,.........); 函数说明 sprintf()会根据参数format字符串来转换并格式化数据,然后将结果复制到参数str所指的字符串数组,直到出现字符串结束(’\0’)为止。关

  • sprintf 格式化字符串复制 相关函数 printf,sprintf 表头文件 #include<stdio.h> 定义函数 int sprintf(char *str, const char *format, ...); 函数说明 sprintf()会根据参数format字符串来转换并格式化数据,然后将结果复制到参数str所指的字符串数组,直到出现字符串结束(’\0’)为止。关于参数fo

  • 目录 1. 上下文 2. 过滤器 3. 小结 php常被提起的一个特性是流上下文. 这个可选的参数甚至在用户空间大多数流创建相关的函数中都可用, 它作为一个泛化的框架用于向给定包装器或流实现传入/传出额外的信息.

  • 对于用户名和密码,我使用NameCallback和PasswordCallback。对于用户名和密码,浏览器会弹出窗口,当我输入用户名和密码时,JAAS会验证我的请求。 在wireshark上,我看到401未经授权的消息(www-authenticate header)出现,当我输入用户名/密码时,带有凭据的HTTP请求生成(带有授权header)并发送到服务器。 编辑问题: 以下是实际情况: U

  • 问题内容: 首先,感谢任何帮助我解决此问题的人。我正在使用SQL 2005,但如果05中没有可用的解决方案,则可以使用2008。 我有一排数据看起来像这样: 因此,我要做的是每天计算每个区域的总请求量。结果应为: 我该怎么做呢?我很沮丧,没有任何谷歌搜索帮助。 问题答案: 您将需要一个Calendar表,或者可以使用CTE生成一个。一旦有了这些,其余的查询就应该变得无关紧要了。由于递归问题并且不允