2017-12-31 344 views
2
#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는 인수로 포인터가 필요합니다.atoi를 사용하여 문자열에서 가져온 정수

내가 좋아하는 몇 가지 큰 문자열을 읽으면 "111555434536563673673567367 ..." 2000 사이의 길이와 - 3000

내가 이해할 수없는 이유는 "스마"을 인쇄, 대신에서 특정 숫자를 인쇄 할 때 내 문자열은 83506과 같은 거대한 정수를 출력합니다.

+1

[atoi] (https://stackoverflow.com/q/17710018/995714)를 사용하지 마십시오. 대신'strtol'을 사용하십시오. –

답변

1

내가 읽은 것에서는 atoi에 포인터가 인수로 필요합니다.

포인터가 필요한 것은 거래의 일부일뿐입니다. 또 다른 부분은 포인터가 정수를 나타내는 null로 끝나는 문자열을 가리켜 야한다는 것입니다.

또한 x = sir[2]; pX = &xsir[] 어레이의 두 번째 요소의 포인터를 얻는 방법 하지이다 x 세번째 디지트의 복사본이다 (어레이 제로로부터 임) 및 pX복사 포인터이다 . 당신이 atoi와 함께 할 필요가 있다면,

int thirdDigitVal = sir[2] - '0'; 

에 자리를 복사 : 당신이 한 자리의 숫자 값을 얻을 그것에서 '0'을 빼려면

는 (제로 주위에 작은 따옴표를 참고) null로 끝나는 문자열 :

char copy[2] = {0}; 
copy[0] = sir[2]; 
int thirdDigitVal = atoi(copy);