背景
我试图确定某些国家字母字母的字符代码。
问题
我的代码有问题吗?
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"
答案 0 :(得分:3)
'a'
的字符代码确实是97,但"a"
的类型为char *
。单引号'
编码字符,双引号"
编码字符串文字。
尝试
char a = 'a';
答案 1 :(得分:2)
char a = "a";
问题是"a"
是一个C字符串,一个指向以char
为空的数组的指针。这意味着您最终会分配地址的某些部分而不是字符的序数值。
您需要像这样分配char
:
char a = 'a';
如果编译时启用了警告,则编译器会告诉您有关错误的信息。例如,我的GCC编译器-Wall
说:
main.c: In function 'main': main.c:3:14: warning: initialization makes integer from pointer without a cast [enabled by default] char a = "a"; // "a" ascii code is 97 ^
你也必须永远不要写:
printf(buffer);
如果buffer
包含任何格式字符串,则会导致printf
尝试读取您未提供的参数。
改为写
printf("%s", buffer);
答案 2 :(得分:1)
您要在char*
分配char
到该行:
char a = "a"; // "a" ascii code is 97
您是否有编译器错误或警告?
此外,由于您要确定字符编码,因此必须确保源文件正确编码(UTF8,ANSI ...)