Skip to content

CPP atoi 函数

越界问题

输入代码:

#include<stdio.h>
int main()
{
    char a = '7';
    char b = '2';

    printf("a=%d, b=%d\n", atoi(&a), atoi(&b));
    printf("a=%p, b=%p\n", &a, &b);
    return 0;
}

输出结果:

a=7,b=27
a=0x7fff85cd714f,b=0x7fff85cd714e

结果分析:
观察地址发现,atoi() 在转换 b 时第一个字符为 2,第二个字符为 7,所以 atoi(&b) 输出结果 27,所以在实际使用中如果不能确定内存数据排列情况使用 atoi() 可能会有问题。

Comments