2012-12-12 63 views
1

我想從結構體中的文件中存儲信息。我的文件由行組成(每行必須是不同的結構)和列,每列都是不同的數據。文件看起來是這樣的:將空格分隔的文件轉換爲結構數組C

1 AB 
2 CD 
3 CD 
4 AB 

我的結構是這樣的(其中節點數量是第一個整數,節點類型是兩個字母):

struct nodes{ 
int nodeNumber; 
char nodeType[2]; 
}; 

到目前爲止我的代碼是這樣的:

lines = lineCount(nodes); //calculates how many lines file has 
struct nodes node[lines]; //creates structure array 
no = fopen(nodes, mode); 
if(no == NULL){ 
    printf("Can't find the files."); 
    exit(1); 
}else{ 
    for(i = 0; i < lines; i++){ 
     fscanf(no, "%d %2c \n", &id, current); 
     node[i].nodeNumber = id; 
     strcpy(node[i].nodeType, current); 
    } 
} 

當我調試當前值是:當前= \「AB \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \ 000 \「而不只是AB

有什麼想法嗎?

+0

「current」聲明如何?你看到的只是字符緩衝區中有nul個字節。因爲在C中沒有什麼可擔心的,nul字節表示字符串的結尾。還要注意,'strcpy'會嘗試在你的'nodeType'的末尾放置一個空字節,這會使緩衝區溢出。 –

+0

我解決了我的問題,即使在我收錄的代碼中也是如此。感謝您的幫助! – Shepard

回答

0

scanf不會終止以%c格式代碼讀取的字符。 (雖然顯然current有很多完全無效的,我不知道你是否能對數。

你應該申報currentchar[2],並使用memcpy爲2的長度,而不是strcpy

1

問題是你的strcpy使用。它複製,以終止即字符數組,這意味着strcpy將複製,直到它看到字符串終止符'\0'投入,在數組的結束,這意味着你將覆蓋數組外的一個字節

要麼使用手動複製逐個字符的函數(如memcpy),要麼將數組的大小增加到三個,以便它可以適合終止字符(這意味着您必須確保current的定義也具有大小三個,帶有一個字符串終結符)。

相關問題