#include<stdio.h>
#include<conio.h>
#include<string.h>
int main() { {
char sir[3000];
int i;
int suma = 0;
int lungime;
scanf("%s", sir);
lungime = strlen(sir);
char x;
char *pX;
x = sir[2];
pX = &x;
suma = atoi(pX);
return 0;
}
我正在做adventOfCode,Day1。 我的问题是我无法使用atoi从字符串中选择某些数字。 从我读到的,atoi需要一个指针作为参数。
如果我读了一些像“111555434536563673673567367 ......”这样的大字符串。 长度在2000 - 3000之间
我无法理解为什么当我打印“suma”时,它不会打印出我的字符串中的某个数字,而是会输出一些巨大的整数,如83506.
答案 0 :(得分:1)
根据我的阅读,
atoi
需要一个指针作为参数。
需要一个指针只是交易的一部分。另一部分是指针需要指向表示整数的以空字符结尾的字符串。
此外,x = sir[2]; pX = &x
不如何获得指向sir[]
数组的第二个元素的指针:x
是第三个数字的副本(数组)从零开始,pX
是指向副本的指针。
如果您想获得单个数字的数值,请从中减去'0'
(注意零附近的单引号):
int thirdDigitVal = sir[2] - '0';
如果您需要使用atoi
,请将数字复制到以空字符结尾的字符串中:
char copy[2] = {0};
copy[0] = sir[2];
int thirdDigitVal = atoi(copy);