当前位置:  开发笔记 > 编程语言 > 正文

为什么atoi会返回随机数?

如何解决《为什么atoi会返回随机数?》经验,为你挑选了2个好方法。

我试图从文本文件中读取数据(时间).并将其转换为可以DiffTime到当前系统时间的东西.

我现在已经非常接近正常工作,我可以品尝它,但我遇到了一个我无法解决的问题.(我对C语言有一个非常基本的把握).

此程序从文本文件中读取数据,将其拆分为两个char数组,然后尝试将atoi其转换为整数.但是,我在第二次atoi通话时遇到问题.

从最下面的两个printf陈述,我应该得到:

12  
34

但由于某种原因,我得到了这些方面的东西.

12  
3412

我认为它atoi超出了其中一个char数组的边界,或者我的char数组太长或太短.无论哪种方式,我都无法理解正在发生的事情.

#include 
#include 
#include 
#include 
#include 
#include 

#define COPYMODE 0644

int main (int argc, char *argv[]){
    int  i, nRead, fd;

    int  source;
    int  ihour;
    int  imin;

    int  STATE_OK = 0;
    int  STATE_WARNING  = 1;
    int  STATE_CRITICAL = 2;
    int  STATE_UNKNOWN  = 3;
    /* indicates if system is paused 1 = System is paused, 0 = System running */
    int  system_paused  = 0; 

    char filebuf[5]; 
    char hourbuf[2];
    char minbufer[2];

    if((fd = open(argv[1], O_RDONLY)) == -1)
    {
        printf("failed open : %s", argv[1]);
    }
    else
    {
        nRead = read(fd, filebuf, 5);
    }
    close(source);

    printf("filebuffer %s\n", filebuf);

    hourbuf[0] = filebuf[0];
    hourbuf[1] = filebuf[1];

    printf("Hour Buffer %c%c\n", hourbuf[0],hourbuf[1]);

    minbufer[0] = filebuf[2];
    minbufer[1] = filebuf[3];

    printf("Min Buffer %c%c\n", minbufer[0],minbufer[1]);

    imin = atoi(minbufer);
    ihour = atoi(hourbuf);


    printf("hour as int %d\n", ihour);
    printf("min as int %d\n", imin);

    return 0;
}

Mark Wilkins.. 10

您需要null终止字符串.使hourbuf和minbufer 1更长,并在调用atoi之前将0放在最后.两个缓冲区在堆栈上相邻,因此读取minbufer也会扫描到hourbuf.



1> Mark Wilkins..:

您需要null终止字符串.使hourbuf和minbufer 1更长,并在调用atoi之前将0放在最后.两个缓冲区在堆栈上相邻,因此读取minbufer也会扫描到hourbuf.



2> Alexander Ge..:

你忘了char用零终止你的缓冲区.

char hourbuf[2];
char minbufer[2];

应该

char hourbuf[3];
char minbufer[3];

hourbuf[2] = '\0';
minbufer[2] = '\0';

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有