【问题标题】:What is wrong with my itoa conversion?我的 itoa 转换有什么问题?
【发布时间】:2014-05-12 08:13:24
【问题描述】:

背景

我正在尝试确定一些国家的变音字母的字符代码。

问题

我的代码有问题吗?

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"

【问题讨论】:

  • 让我警告你,itoa 不是标准 C。正确答案已经被许多人发布了。
  • 这就是我们不喜欢演员阵容的原因。

标签: c itoa


【解决方案1】:

'a' 的字符代码确实是 97,但 "a" 的类型是 char *。单引号 ' 编码字符,双引号 " 编码字符串文字。

试试

char a = 'a';

【讨论】:

  • 它工作,代码很好,但现在我有另一个问题。我将创建另一个线程/问题。
【解决方案2】:
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);

【讨论】:

    【解决方案3】:

    您在该行将char* 分配给char

    char a = "a"; // "a" ascii code is 97
    

    您没有编译器错误或警告吗?

    此外,由于您尝试确定字符编码,因此您必须确保源文件编码正确(UTF8、ANSI...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多