嗨,我有一个文本文件,其中包含以下数据
ABC00011234567
XYZ00021234567为了获得数据,我定义了一个结构
typedef struct data {
char x[3];
char y[4];
char z[7];
} key;在程序中,我所做的就是读取每一行并将其赋值给结构
unsigned char buf[1024];
fgets(buf,sizeof(buf),fptr);
key *k=(key*)buf;
int y = atoi(k->y)
printf( "y=%d\n",y);`我以如下方式获取输出
y=1123456
y=2123456我期望的输出是
y=1
y=2我应该假设,atoi获取字符串的指针并迭代,直到遇到EOF?如何获取1和2的值
发布于 2012-10-09 18:43:33
atoi接受以nul结尾的字符串。如果要限制数据atoi解析的长度,则必须向key成员添加自己的终止符
发布于 2012-10-09 18:55:51
您应该假定atoi()一直运行,直到它到达字符串的末尾或一个无效字符。例如,对于字符串`"123zzz“,它将返回123。
你应该终止你的字符串(在它们的末尾放一个零)并停止使用atoi() (例如,使用strtol() );或者编写你自己的不需要终止字符串的转换。
注意:(通常)除了编写编译器之外,atoi()不应该用于任何事情,因为它做的事情对普通人来说是没有意义的(例如,"0129“是10而不是129,因为它决定数字是八进制的,而9不是八进制的有效数字)。
发布于 2012-10-09 18:43:41
atoi()假设一个以零结尾的字符串。在本例中,字符串不会以零结尾,因此在读取y之后,atoi将读取z中的数据。
要只读取4位数,可以使用sscanf:
sscanf(k->y,"%4d",&y);https://stackoverflow.com/questions/12798272
复制相似问题