我试图从文本文件中读取数据(时间).并将其转换为可以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.
您需要null终止字符串.使hourbuf和minbufer 1更长,并在调用atoi之前将0放在最后.两个缓冲区在堆栈上相邻,因此读取minbufer也会扫描到hourbuf.
你忘了char
用零终止你的缓冲区.
char hourbuf[2]; char minbufer[2];
应该
char hourbuf[3]; char minbufer[3]; hourbuf[2] = '\0'; minbufer[2] = '\0';