首页 > 解决方案 > 在 C 中将“char”转换为“int”的逻辑

问题描述

每个人!

请帮我理解以下问题......所以我将输入一个字符串类型的音符,看起来像“A5”或“G#2”或“Cb4”等。我需要提取一个八度索引,它是最后一个数字“5”或“2”或“4”......提取后我需要它作为int类型。

所以我这样做了:

string note = get_string("Input: ");
int octave = atoi(note[strlen(note) - 1]);
printf("your octave is %i \n", octave);

但它给了我一个错误“错误:不兼容的整数到指针转换将'char'传递给'const char *'类型的参数;使用& [-Werror,-Wint-conversion]获取地址”

然后我尝试从函数中排除数学,并这样做:

int extnum = strlen(note) - 1;
int octave = atoi(note[extnum]);

它也没有奏效。所以我对 atoi 函数进行了研究,但我不明白......

  1. ATOI 需要一个字符串 (CHECK)
  2. 将其转换为整数,而不是 ASCII 含义 (CHECK)
  3. atoi 函数库 (CHECK)

我基本上在问“取该字符串的第 n 个字符并将其设为 int”。

在谷歌搜索了一段时间后,发现了另一个代码示例,其中一个人使用带有此符号“&”的 atoi。所以我这样做了

int octave = atoi(&note[strlen(note) - 1]);

它奏效了!但我不明白为什么它与 & 符号一起工作而没有它就不能工作......因为它总是在没有它的情况下工作!有一百万次我给出了一个像'5'这样的单字符串,只是使用了atoi,它工作得很好......

请帮助我,为什么在这种情况下它表现得如此奇怪?

标签: ccharintlogicatoi

解决方案


C 没有原生字符串类型。字符串通常表示为 char 数组或指向 char 的指针。

假设这string只是一个 typedef 到char *.

ifnote是一个字符数组,note[strlen(note)-1]只是最后一个字符。由于atoi需要一个指向 char 的指针(必须以 null 结尾),因此您必须传递 char 的地址而不是值。

将一个 char 数字转换为 int 的任务也可以更容易地解决:

int octave = note[strlen(note) - 1] - '0';

推荐阅读