2017-12-31 28 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は引数としてポインタを必要とします。

ポインタを必要とするのは取引の一部に過ぎません。もう1つの部分は、ポインタが整数を表すヌル終了文字列を指す必要があることです。

また、x = sir[2]; pX = &xあなたがsir[]配列の2番目の要素へのポインタを取得する方法ないある:xは、3桁目のコピーである(配列はゼロベースである)、及びpXそのコピーへのポインタであります。あなたはatoiでそれを行う必要がある場合は、

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

に数字をコピー:あなたは、一桁の数値を取得し、それから'0'を減算したい場合

は、(ゼロの周りの単一引用符に注意してください)ヌル終了文字列:

char copy[2] = {0}; 
copy[0] = sir[2]; 
int thirdDigitVal = atoi(copy); 
関連する問題