2013-10-07 29 views
0

我試圖存儲從文件中讀取到一個字符數組的字符,但它最終存儲每個後續的字符爲好。對於這段代碼,我創建了一個結構和一個函數來初始化數組。Ç - 字符串在結構返回整個數組

從 「Structures.h」

typedef struct (
    int size; 
    char *elem; 
    } cvector; 

從 「Utilities.c」

cvector make_cvector (int size) 
    { cvector temp; 
     temp.size = size; 
     temp.elem = calloc(size, sizeof(char)); 
     return temp; 
    } 

然後我想讀的文本文件,上面寫着: 「ABC」

在人體中,我指出:(其中NPTR是用於打開該文件的指針)

cvector NodeID; 
NodeID = make_cvector(3); 
for(i=0;i<3;i++){ 
     fscanf(nPtr,"%s", &NodeID.elem[i]); 
     printf("%s ",&NodeID.elem[i]); 
} 

這將導致「ABC」,但這個循環之後,我輸入另一個循環:

for(i=0;i<3;i++) 
     printf("%s ", &NodeID.elem[i]); 

所得來的「ABC BC C」的時候,其實我想要的「一」,「B」和「C」存儲分別。我的初始化或指針可能有問題,但我一直試圖在線閱讀無濟於事。錯誤在哪裏?謝謝!

回答

2

您在打印字符串時,你真正想要做的是打印單個字符。更換

printf("%s ",&NodeID.elem[i]); 

通過

printf("%c ",NodeID.elem[i]); 

,它應該工作。

+0

謝謝你的和我的理解錯誤。然而,印刷只是一種展示我的問題的手段。我遇到的真正問題是在後面的部分,我把: 'if(strcmp(LoadLoc,&NodeID.elem [j])== 0)' 這基本上從未發生。我想這個錯誤並不是用於初始化,而是使用「strcmp」,這將是一個合適的選擇。 :D我會嘗試在網上搜索。先生非常感謝您! – user2853084

+0

'LoadLoc'是一個包含單個字符的字符串,對嗎?如果是這樣那麼存儲'LoadLoc'在'char'而不是做'如果(LoadLoc == NodeID.elem [J])' – Simon

+0

謝謝!這很有效,但我想保持一定程度的普遍性,因爲程序的某些部分可能轉向比較字符串而不僅僅是字符。無論如何,我通過初始化它們作爲代替「cvector」「CMATRIX」,其中第一維是一個字符串數組,第二尺寸每串字符數組解決了這個問題。感謝所有的幫助! :d – user2853084