Использование atoi, захват целого числа из строки

#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

Я не могу понять, почему, когда я печатаю «суму», вместо того, чтобы печатать определенную цифру из моей строки, он печатает какое-то огромное целое число, например 83506.


person NuSuntStudent    schedule 31.12.2017    source источник
comment
Не используйте atoi. Вместо этого используйте strtol   -  person phuclv    schedule 31.12.2017


Ответы (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);
person Sergey Kalinichenko    schedule 31.12.2017