我的itoa转换有什么问题?

时间:2014-05-12 08:13:25

标签: c itoa

背景

我试图确定某些国家字母字母的字符代码。

问题

我的代码有问题吗?

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"

3 个答案:

答案 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 ...)