Я пытаюсь прочитать данные из текстового файла (время). и преобразовать это во что-то, что может быть DiffTime'ed к текущему системному времени.Почему atoi возвращает случайные числа?
Я сейчас так близко к тому, чтобы это правильно работало, я могу попробовать его, но я застрял в проблеме, которую я не могу решить. (У меня очень простое понимание языка C).
эта программа считывает данные из текстового файла, разбивает его на два массива символов, а затем пытается использовать atoi
, чтобы преобразовать это в целое число. Тем не менее, у меня возникают проблемы со вторым вызовом atoi
.
Из двух нижних printf
заявлений, я должен получать:
12 34
, но по какой-то причине я получаю что-то вдоль этих линий.
12 3412
Я полагаю, что atoi
является overunning в boundries одного из полукокса массивов или мои символьные массивы слишком длинные или слишком короткие. В любом случае, я не могу понять, что происходит.
#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;
}
+1, потому что вы дали хорошее объяснение странного «3412» выхода. –
мой мозг рассказывал мне об этом, но я не мог понять, как остановить это, что заставило меня с ума сойти. я пришел из фона программирования, где не было «нулевого завершения», поэтому я продолжаю забывать об этом .... :) спасибо за ответ. – Kristiaan