如何正确格式化 atoi 函数?

How does one correctly format the atoi function?

我正在尝试熟悉 atoi 函数,因此我使用它编写了一个基本程序,但我遇到了一些问题:

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

int main(void)
{
    string s = get_string("String:");
    int i = get_int("Integer:");
    int a = atoi(s[1]);
    int j = i + a;
    
    printf("%i\n", j);
}

当我尝试编译它时,收到错误消息 "incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with & [-Werror,-Wint-conversion]"。这似乎表明它想要与 char 有关,但根据我的阅读,我的印象是 atoi 与字符串一起使用。如果有人能解释我哪里出错了,我将非常感激

您通过索引字符串传递 char(假设字符串是 char* 的类型定义),它希望您传递 char*。所以只需传递完整的字符串:

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

int main(void)
{
    string s = get_string("String:");
    int i = get_int("Integer:");
    int a = atoi(s);
    int j = i + a;
    
    printf("%i\n", j);
}

这是 atoi()

的语法
int atoi(const char *nptr);

注意参数是一个指针,而不是单个字符。

然而,发布的代码有:

int a = atoi(s[1]);

是单个字符,不是指针

建议:

int a = atoi( s );

此外,函数:atoi() 无法让程序知道何时发生错误。建议使用 strtol() 函数,该函数确实可以指示何时发生错误