如何正确格式化 atoi 函数?
Posted
技术标签:
【中文标题】如何正确格式化 atoi 函数?【英文标题】:How does one correctly format the atoi function? 【发布时间】:2020-12-11 18:32:28 【问题描述】:我正在尝试熟悉 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 与字符串一起使用。如果有人能解释我哪里出错了,我会非常感激
【问题讨论】:
试试atoi(s);
。提示:研究 strtol()
以获得比缺乏错误处理的 atoi()
更好的代码。
不确定string s
是什么,如果string
是char*
,那么你的atoi
函数应该被称为atoi(s)
我怀疑<cs50.h>
隐藏了typedef char * string
等。虽然是出于好意,但我认为它会造成这样的混乱。 BlueKhakis,我建议编码char *s = get_string("String:");
。
嗨@chux-ReinstateMonica,我将第 7 行替换为您建议的行,但仍然收到相同的错误消息。知道为什么吗?
@BlueKhakis 是的,还需要应用以下答案。
【参考方案1】:
您通过索引字符串传递char
(假设字符串是char*
的typedef),它希望您传递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);
【讨论】:
【参考方案2】:这是atoi()
的语法
int atoi(const char *nptr);
注意参数是一个指针,而不是单个字符。
但是,发布的代码有:
int a = atoi(s[1]);
是单个字符,不是指针
建议:
int a = atoi( s );
此外,函数:atoi()
无法让程序知道何时发生错误。建议使用strtol()
函数,该函数具有指示何时发生错误的功能
【讨论】:
以上是关于如何正确格式化 atoi 函数?的主要内容,如果未能解决你的问题,请参考以下文章