c - 从命令行传递参数时 *argv[] 中的字符大小

标签 c unicode utf-8 char

<分区>

我有一个简单的程序。

#include <stdio.h>
#include <string.h

int main(int argc, char *argv[])
{   
    for (int i = 0; i < strlen(argv[1]); ++i)
        printf("%x ", argv[1][i]);
    printf("\n");
}

我运行它就像

$ ./program 111
31 31 31

但是当我运行它时

$ ./program ●●●
ffffffe2 ffffff97 ffffff8f ffffffe2 ffffff97 ffffff8f ffffffe2 ffffff97 ffffff8f

这里每个应该被编码为3个字节(UTF-8):e2 97 8f , 但看起来它是由 3 个 unsigned 编码的。 如果 sizeof(char) 始终为 1 个字节,我不明白 ffffff 从何而来。

最佳答案

printf() 是一个接受可变数量参数的函数。

任何类型小于 int 的整数参数都会自动转换为 int 类型。

显然,在您的实现中,“字符”little-round-thing3char 组成,全部带有负数值(value)。

试试这些

printf("%x ", (unsigned char)argv[1][i]);
printf("%hhx ", argv[1][i]); // thanks to Jonathan Leffler

关于c - 从命令行传递参数时 *argv[] 中的字符大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880309/

相关文章:

c - C 中的右移除法

c - 如何解决函数调用中更改指针值的问题?这是一个cgo错误吗?

c - 短路逻辑或行为

mysql - 如何一次性修改mariadb图表集?

java - JVM中v的格式修改为UTF-8

php - UTF-8贯穿始终

Python - 从 C 调用 python 函数

java - Android 2.x 梵文 unicode 问题

swift - 如何快速表示 IOS 不支持的字母

python - NameError:名称 'unicode' 未定义