【发布时间】:2021-12-25 00:08:05
【问题描述】:
我已将以下字符串保存到名为 buffer 的 char 数组中:
{app_id:9401}
我想获得两个整数:94 和 01。我想将buffer[8] 和buffer[9] 转换为第一个整数(94)和buffer[10] 和buffer[11] 转换为第二个整数(1 )。我正在尝试这样做,但我得到了分段错误。为什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
char buffer[] = "{app_id:9401}";
printf("First number:%c%c. Second Number: %c%c\n", buffer[8], buffer[9], buffer[10], buffer[11]);
char first_number[10] = "";
strcat(first_number, buffer[8]);
strcat(first_number, buffer[9]);
int x = atoi(first_number);
printf("%d\n", x);
}
【问题讨论】:
-
C 指定所有数字字符都应连续编码,这意味着您可以从任何数字字符中减去
'0'以获得其等效整数(即'9' - '0' == 9)。那么将所有四个数字放在一起只是一个十进制算术问题。 -
寻求调试帮助的问题通常应包括minimal reproducible example,其中包括函数
main和所有必要的#include指令。如果您对输入进行硬编码,例如使用char buffer[] = "{app_id:9401}";,然后将发布的代码应用到函数main,您是否能够重现错误?如果是,请将其发布为minimal reproducible example。 -
由于您没有回复我的minimal reproducible example 请求,我现在已将您发布的代码转换为自己的代码。如果您对我的更改不满意,请随时 edit 提出您的问题。
标签: c string char integer atoi