我正在搜索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环境中
答案 0 :(得分:1)
小例子:
#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。