我试图从文本文件中读取数据(时间).并将其转换为可以DiffTime到当前系统时间的东西.
我现在已经非常接近正常工作,我可以品尝它,但我遇到了一个我无法解决的问题.(我对C语言有一个非常基本的把握).
此程序从文本文件中读取数据,将其拆分为两个char数组,然后尝试将atoi其转换为整数.但是,我在第二次atoi通话时遇到问题.
从最下面的两个printf陈述,我应该得到:
12 34
但由于某种原因,我得到了这些方面的东西.
12 3412
我认为它atoi超出了其中一个char数组的边界,或者我的char数组太长或太短.无论哪种方式,我都无法理解正在发生的事情.
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#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;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ins 10
您需要null终止字符串.使hourbuf和minbufer 1更长,并在调用atoi之前将0放在最后.两个缓冲区在堆栈上相邻,因此读取minbufer也会扫描到hourbuf.
你忘了char用零终止你的缓冲区.
char hourbuf[2];
char minbufer[2];
Run Code Online (Sandbox Code Playgroud)
应该
char hourbuf[3];
char minbufer[3];
hourbuf[2] = '\0';
minbufer[2] = '\0';
Run Code Online (Sandbox Code Playgroud)