首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解ATOI函数

理解ATOI函数
EN

Stack Overflow用户
提问于 2012-10-09 18:40:36
回答 4查看 1.5K关注 0票数 0

嗨,我有一个文本文件,其中包含以下数据

代码语言:javascript
复制
ABC00011234567
XYZ00021234567

为了获得数据,我定义了一个结构

代码语言:javascript
复制
typedef struct data {
 char x[3];
 char y[4];
 char z[7];
} key;

在程序中,我所做的就是读取每一行并将其赋值给结构

代码语言:javascript
复制
unsigned char buf[1024];
fgets(buf,sizeof(buf),fptr); 
key *k=(key*)buf;
int y = atoi(k->y)
printf( "y=%d\n",y);`

我以如下方式获取输出

代码语言:javascript
复制
y=1123456
y=2123456

我期望的输出是

代码语言:javascript
复制
y=1
y=2

我应该假设,atoi获取字符串的指针并迭代,直到遇到EOF?如何获取12的值

EN

回答 4

Stack Overflow用户

发布于 2012-10-09 18:43:33

atoi接受以nul结尾的字符串。如果要限制数据atoi解析的长度,则必须向key成员添加自己的终止符

票数 2
EN

Stack Overflow用户

发布于 2012-10-09 18:55:51

您应该假定atoi()一直运行,直到它到达字符串的末尾或一个无效字符。例如,对于字符串`"123zzz“,它将返回123。

你应该终止你的字符串(在它们的末尾放一个零)并停止使用atoi() (例如,使用strtol() );或者编写你自己的不需要终止字符串的转换。

注意:(通常)除了编写编译器之外,atoi()不应该用于任何事情,因为它做的事情对普通人来说是没有意义的(例如,"0129“是10而不是129,因为它决定数字是八进制的,而9不是八进制的有效数字)。

票数 2
EN

Stack Overflow用户

发布于 2012-10-09 18:43:41

atoi()假设一个以零结尾的字符串。在本例中,字符串不会以零结尾,因此在读取y之后,atoi将读取z中的数据。

要只读取4位数,可以使用sscanf:

代码语言:javascript
复制
sscanf(k->y,"%4d",&y);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12798272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档