请教关于 atoi() 函数的问题,请熟悉者指点!

General1982 2009-05-25 05:39:10
代码如下:
char recordNumber[4];
memset( recordNumber, 0x20, sizeof(recordNumber) );
memcpy( recordNumber, header->record_num, sizeof(recordNumber) );
int recordNum = atoi(recordNumber);

gdb 跟踪结果如下:

Breakpoint 1, set_msg_ATTENTION_SELL_STOP_REPLY (odrret=0xbffe09f0, data=0xbfffc200, lastflag=0xbffe09ec, msgNum=0xbffe09e8)
at recvInquiryMsg.c:1873
1873 memset( recordNumber, 0x20, sizeof(recordNumber) );
(gdb) n
1874 memcpy( recordNumber, header->record_num, sizeof(recordNumber) );
(gdb) n
1875 int recordNum = atoi(recordNumber);
(gdb) p recordNumber
$1 = "0010" // 这里只是正确的

(gdb) n
1877 char *posPtr = (char*)data + EXIF_ATTENTION_SELL_STOP_REPLY_SIZE; // 59 + 8 + 1
(gdb) p recordNum
$2 = 1011111111 // atoi() 转换出来的值是错误的!!???

(gdb)


请问为什么会出现这种情况?请了解这给予指点!谢谢!!
...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangpingfang 2009-05-25
  • 打赏
  • 举报
回复
但是header->record_num是多长呢?
liliangbao 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hairetz 的回复:]
memcpy( recordNumber, header->record_num, sizeof(recordNumber) );

这句不正常,一般是 cpy源的数据长,你这里的sizeof(recordNumber)是目标地址数据长
[/Quote]
up
pathuang68 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hairetz 的回复:]
memcpy( recordNumber, header->record_num, sizeof(recordNumber) );

这句不正常,一般是 cpy源的数据长,你这里的sizeof(recordNumber)是目标地址数据长
[/Quote]
  • 打赏
  • 举报
回复
memcpy( recordNumber, header->record_num, sizeof(recordNumber) );

这句不正常,一般是 cpy源的数据长,你这里的sizeof(recordNumber)是目标地址数据长
lingyin55 2009-05-25
  • 打赏
  • 举报
回复
recordNumber 是一个数组名,所以可以通过sizeof求出数组的长度。
它只是代表数组的首地址,并不就是说它是一个指针。

[Quote=引用 1 楼 li32768 的回复:]
recordNumber 是一个地址,
所以 sizeof(recordNumber) 就是 一个指针占的大小 , 不是数组的大小,应该不是你这里需要的意思了,
另外 atoi 只能转换 0-255 之间的数值,其他的就很难保证正确性了
[/Quote]
lingyin55 2009-05-25
  • 打赏
  • 举报
回复
你这样试试
char recordNumber[5]; //////
memset( recordNumber, 0x20, sizeof(recordNumber)-1 ); ////////
memcpy( recordNumber, header->record_num, sizeof(recordNumber)-1 );///////
recordNumber[5]='\0';///////
int recordNum = atoi(recordNumber);
li32768 2009-05-25
  • 打赏
  • 举报
回复
recordNumber 是一个地址,
所以 sizeof(recordNumber) 就是 一个指针占的大小 , 不是数组的大小,应该不是你这里需要的意思了,
另外 atoi 只能转换 0-255 之间的数值,其他的就很难保证正确性了

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧