背景
我试图确定一些国家变音字母的字符代码。
问题
我的代码有问题吗?
char a = "a"; // "a" ascii code is 97
char buffer[8];
itoa(buffer,(int)a, 10);
print(buffer); // but it prints "252" instead of "97"
的字符代码'a'
确实是 97,但"a"
属于char *
. 单引号'
编码字符,双引号"
编码字符串文字。
尝试
char a = 'a';
char a = "a";
问题是这"a"
是一个 C 字符串,一个指向char
. 这意味着您最终分配了地址的某些部分,而不是字符的序数值。
您需要分配一个char
这样的:
char a = 'a';
如果您在启用警告的情况下进行编译,那么编译器会告诉您错误。例如,我的 GCC 编译器-Wall
说:
main.c:在函数'main'中: main.c:3:14: 警告:初始化从没有强制转换的指针生成整数 [默认启用] 字符 a = "a"; // "a" ascii 码是 97 ^
你也绝不能写:
printf(buffer);
如果buffer
包含任何格式字符串,那么这将导致printf
尝试读取您未提供的参数。
而是写
printf("%s", buffer);
您在该行分配一个char*
to char
:
char a = "a"; // "a" ascii code is 97
你没有编译器错误或警告吗?
此外,由于您试图确定字符编码,因此您必须确保源文件编码正确(UTF8、ANSI ...)