#include <stdio.h>
#include <stdlib.h>
int main(){
int a;
char c;
a = 999990;
c = '9';
a += atoi(&c);
printf("%d\n", atoi(&c));
printf("%d\n", a);
return 0;
}
9
1000086
という結果になります。どうしてでしょうか。
cには終端のナル文字が含まれていないので、範囲外の読み込みが発生し、未定義動作になります。fly5728 さんが書きました:これを実行すると
9
1000086
という結果になります。どうしてでしょうか。
#include <stdio.h>
#include <stdlib.h>
int main(){
int a;
char c;
a = 999990;
c = '9';
printf("&c = %p, &a = %p, atoi(&c) = %d\n", (void*)&c, (void*)&a, atoi(&c));
a += atoi(&c);
printf("%d\n", atoi(&c));
printf("%d\n", a);
return 0;
}
引数として渡しているデータの型はchar*であり、atoiが受け付ける引数の型はconst char*なので、型自体は間違っていません。box さんが書きました:atoi()に渡す引数の型が違ってるようです。