c - 在 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 函数进行了研究,但我不明白......
- ATOI 需要一个字符串 (CHECK)
- 将其转换为整数,而不是 ASCII 含义 (CHECK)
- atoi 函数库 (CHECK)
我基本上在问“取该字符串的第 n 个字符并将其设为 int”。
在谷歌搜索了一段时间后,发现了另一个代码示例,其中一个人使用带有此符号“&”的 atoi。所以我这样做了:
int octave = atoi(¬e[strlen(note) - 1]);
它奏效了!但我不明白为什么它与 & 符号一起工作而没有它就不能工作......因为它总是在没有它的情况下工作!有一百万次我给出了一个像'5'这样的单字符串,只是使用了atoi,它工作得很好......
请帮助我,为什么在这种情况下它表现得如此奇怪?
解决方案
C 没有原生字符串类型。字符串通常表示为 char 数组或指向 char 的指针。
假设这string
只是一个 typedef 到char *
.
ifnote
是一个字符数组,note[strlen(note)-1]
只是最后一个字符。由于atoi
需要一个指向 char 的指针(必须以 null 结尾),因此您必须传递 char 的地址而不是值。
将一个 char 数字转换为 int 的任务也可以更容易地解决:
int octave = note[strlen(note) - 1] - '0';
推荐阅读
- reactjs - 使用 react-apollo useMutation hook 处理错误
- android - 如何在 Android 10、Target API 29 中从设备的共享存储(根目录)读取现有文件?
- python - 我收到登录路由 TypeError 的错误:'int' object is not subscriptable
- azure - 无法使用 ansible 从捕获的 azure 映像创建 VM
- java - 持有人cardview更改textview颜色错误
- bash - shell script to Start/Stop tomcat server
- android - 保护应用免于绕过根检测(Frida Server)
- java - 如何在火花中处理这种情况?
- maven - Maven跳过测试资源的副本
- transformer - Huggingface 变形金刚 - AttributeError:“MrpcProcessor”对象没有属性“tfds_map”