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';
}
非常感謝您的任何建議,
無需終止device_buff。這完全沒用,因爲你已經掌握了它的長度。空終止只是char *緩衝區能夠提供給字符串操作庫函數(printf,strcpy等)的慣例。 – kriss 2010-10-31 10:32:53
請爲您的問題使用更具描述性的標題。 – 2010-10-31 10:34:32