为什么 atoi() 会导致总线错误?

Dav*_*vid 2 c atoi

#include <stdlib.h>
#include <stdio.h>

main()
{
    const char* str_int = "777";
    const char* str_float = "333.3";
    int i = atoi(str_int);
    float f = atof(str_float);

    printf("%s %s", i, f); 
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些我在网上找到的示例代码,它们都导致了总线错误。为什么会这样?

Mys*_*ial 5

printf的不正确。试试这个:

printf("%d %f", i, f); 
Run Code Online (Sandbox Code Playgroud)

问题是您的格式说明符是%s,它需要字符串。但是你给了它一个int和一个float。因此结果是未定义的行为。

它崩溃的原因是因为它printf会尝试将参数作为字符串(它们是指针)读取并按原样尊重它们,但它们是无效的指针。

这是关于printf及其格式说明符的参考:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/