gcc 4.4.4 c89
Есть ли лучший способ сделать это?
У меня есть следующий код для чтения из текстового файла. Текстовый файл содержит такие строки:
4 5 6 1 5 7 5 9 5 3 5 7 8 3 2 3
7 2 3 4 5 3 7 9 3 2 5 6
Я привел пример только с 2 строками, но их может быть больше и каждая разной длины.
Что мне нужно сделать, так это записать числа в буфер, чтобы я мог их проанализировать. Что достаточно просто.
Однако я ищу решение, которое не будет перезаписывать буфер для каждой строки. Поэтому мой буфер результатов должен содержать следующее:
4 5 6 1 5 7 5 9 5 3 5 7 8 3 2 3 7 2 3 4 5 3 7 9 3 2 5 6
Поэтому я использую fgets для чтения в строках и передаю эту строку в свою функцию анализа.
Однако мне нужно, чтобы значение приращения в цикле for начиналось там, где заканчивался последний.
Я установил для device_buff значение static. Это безопасно? Я не заинтересован в использовании статической переменной внутри функции, так как они не являются поточно-ориентированными и представляют собой глобальную переменную.
int g_load_devices_numbers(void)
{
fget(line_read, DEVICE_SIZE, fp) == NULL) {
analyse_device_numbers(line_read);
}
}
static void analyse_device_numbers(const char * const device_line)
{
size_t i = 0;
static char device_buff[1024] = {0};
static size_t device_counter = 0;
/* Start inserting the last index */
static size_t buff_counter = 0;
/* copy each number into the char array
* only copy up to the 'return' as fgets always inserts one */
for(i = 0; device_line[i] != '\n'; i++, buff_counter++) {
device_buff[buff_counter] = device_line[i];
/* Only count numbers and not spaces */
if(isspace(device_buff[buff_counter]) == 0) {
device_counter++;
}
}
/* nul terminate the vote buffer */
device_buff[buff_counter] = '\0';
}
Большое спасибо за любые предложения,