标签: printf

为什么 wprintf 在 Linux 上将 Unicode 中的俄语文本音译为拉丁语?

为什么下面的程序

#include <stdio.h>
#include <wchar.h>

int main() {
  wprintf(L"??????, ???!");
}
Run Code Online (Sandbox Code Playgroud)

打印“女贞,先生!” 在 Linux 上?具体来说,为什么它将 Unicode 中的俄语文本音译为拉丁语,而不是将其转码为 UTF-8 或使用替换字符?

在 Godbolt 上演示此行为:https ://godbolt.org/z/36zEcG

非宽版会printf("??????, ???!")按预期打印此文本(“??????, ???!”)。

c linux printf wchar non-ascii-characters

35
推荐指数
2
解决办法
1783
查看次数

为什么printf在打印hex时只打印出一个字节?

pixel_datavectorchar.

当我这样做时,printf(" 0x%1x ", pixel_data[0] )我期待着看到0xf5.

但我觉得0xfffffff5我打印出一个4字节的整数而不是1字节.

为什么是这样?我给printf了一个char打印输出 - 它只有1个字节,为什么printf打印4?

NB.在printf实现包裹第三方API内,但只是想知道,这是标准的功能printf

c c++ printf

34
推荐指数
3
解决办法
4万
查看次数

用sprintf填充

我有一个虚假的问题.我想将一个整数打印到带有0的缓冲区填充中,但我无法将其排序sprintf.我正在尝试以下方面

char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );
Run Code Online (Sandbox Code Playgroud)

希望有以下字符串

"000000000000000000000000000324"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?它不代表填充0,最大宽度为30个字符?

c c++ string printf

34
推荐指数
4
解决办法
4万
查看次数

F#printf字符串

我很困惑

let test = "aString"

let callMe =
    printfn test
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?在编译时抛出以下错误:

类型'string'与'Printf.TextWriterFormat <'a>'类型不兼容

这很好用:

printfn "aString"
Run Code Online (Sandbox Code Playgroud)

string printf f#

34
推荐指数
1
解决办法
1万
查看次数

了解包含反斜杠的printf的输出(\ 012)

能帮我理解这个简单代码的输出吗?

const char str[10] = "55\01234";
printf("%s", str);
Run Code Online (Sandbox Code Playgroud)

输出是:

55
34
Run Code Online (Sandbox Code Playgroud)

c string printf

33
推荐指数
3
解决办法
7638
查看次数

用于size_t类型变量的跨平台格式字符串?

在跨平台的c/c ++项目(Win32,Linux,OSX)中,我需要使用*printf函数来打印一些size_t类型的变量.在某些环境中,size_t是8个字节,而在其他环境中它们是4.在glibc上我有%zd,在Win32上我可以使用%Id.有一种优雅的方式来处理这个问题吗?

c c++ printf cross-platform size-t

32
推荐指数
5
解决办法
2万
查看次数

32
推荐指数
2
解决办法
2万
查看次数

有没有办法在fmt.Printf中重用一个参数?

我有一种情况,我想printf两次使用我的论点.

fmt.Printf("%d %d", i, i)
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉fmt.Printf重用同样的东西i

fmt.Printf("%d %d", i)
Run Code Online (Sandbox Code Playgroud)

printf go

32
推荐指数
1
解决办法
4301
查看次数

跨平台/编译器一致的浮点数sprintf

我们有一个需要确定性的游戏,因为它是多人游戏模型的一部分.我们还使用Lua,它在sprintf内部使用(格式为%.14g).

打印数字如0.00001时会出现问题.在某些情况下,它会打印1e-05,在某些情况下,它会打印1e-005(额外为零).

例如,当使用Visual Studio 2015进行编译时,它会进行打印1e-005,并使用Visual Studio 2013进行打印1e-05.我尝试了不同的区域设置,但似乎没有任何效果.

问题是:实现确定性结果的最佳解决方案什么? 我不关心科学记谱法是否标准化或消除.

我想到的解决方案:

  • 当我使用%f符号时,它不会忽略无关紧要的零,因此%.14f会导致不切实际的长数.
  • 使用自定义sprintf方法(从某些标准库粘贴的副本)
  • 使用一些我没想过的特殊格式(我只使用它作为参考:http://www.cplusplus.com/reference/cstdio/printf/)

c++ lua printf string-formatting

32
推荐指数
2
解决办法
4301
查看次数

printf("%x",1)是否会调用未定义的行为?

根据C标准(6.5.2.2第6段)

如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并将具有float类型的参数提升为double.这些被称为默认参数促销.如果参数的数量不等于参数的数量,则行为未定义.如果函数是使用包含原型的类型定义的,并且原型以省略号(,...)结尾,或者促销后的参数类型与参数类型不兼容,则行为未定义.如果函数是使用不包含原型的类型定义的,并且促销后的参数类型与促销后的参数类型不兼容,则行为未定义,但以下情况除外:

  • 一个提升类型是有符号整数类型,另一个提升类型是相应的无符号整数类型,并且该值可在两种类型中表示;
  • 这两种类型都是指向字符类型或空格的限定或不合格版本的指针.

因此,一般来说,只要传递的值适合两种类型,传递int到需要unsigned int(或反之亦然)的可变函数是没有错的.但是,printf读取规范(7.19.6.1第9段):

如果转换规范无效,则行为未定义.如果任何参数不是相应转换规范的正确类型,则行为未定义.

签名/未签名不匹配也不例外.

这是否意味着printf("%x", 1)调用未定义的行为?

c standards printf variadic-functions language-lawyer

31
推荐指数
3
解决办法
1730
查看次数