gpt4 book ai didi

c - 使用 %C、%S、%ls、%lc 时 printf 返回 -1 的示例

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:31 25 4
gpt4 key购买 nike

我正在搜索使用标志时 printf 返回 -1 的示例%C%s%ls%lc。甚至它背后的逻辑。

我在维基百科上查看了 UTF-8 和所有“错误的 utf-8 序列”,但即使使用那些 printf 也不会返回 -1。

所以我尝试了下面的代码[NEW TRY]:

#import <stdlib.h>
#import <stdio.h>
int main() {
// I ADDED THIS
locale = setlocale(LC_ALL, "");
int result = printf("%lc", 0xff00);
printf("%d", result);
return 0;
}

结果:


4

编辑 2:我在 unix 环境中

最佳答案

小例子:

#import <stdlib.h>
#import <stdio.h>
int main() {
char* garbage = (char*)malloc(2);
garbage[0] = 0xff;
garbage[1] = 0x00;
int result = printf("%ls", garbage);
free(garbage);
printf("%d", result);
return 0;
}

ff00 不是有效的 unicode 序列。需要它背后的逻辑是并非所有任意字节序列都是有效的 unicode 字符串。 Unicode 规范指出 ff00 无效。因此,当要求打印它时,printf 返回 -1。

编辑:您也可以尝试使用 wchar_t 并分别使用 0xff00 和 0x0000 作为第一个和第二个短裤(或 0xffff:0x0000 等)。 printf 仍将返回 -1。

关于c - 使用 %C、%S、%ls、%lc 时 printf 返回 -1 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47823445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com