2015-07-20 44 views
3

我想連接使用strcat的結構數組。我的代碼如下:爲什麼'strcat'函數不工作?

int main(){ 

//Implementation of Search table Tree 

struct searchTable 
{ 
    char first[10]; 
    int first_id; 
    char second[10]; 
    int second_id; 
    char third[10]; 
    int third_id; 
    char fourth[10]; 
    int fourth_id; 
    char fifth[10]; 
    int fifth_id; 

}input[5]= { 
     {"ABC", 101}, 
     {"CAB",102}, 
     {"ACB",103}, 
     {"AAC",104}, 
     {"CCB",105} 
}; 
char join[100]={0}; 

strcat(join, input[0].first); 
strcat(join, input[1].second); 
strcat(join, input[2].third); 
strcat(join, input[3].fourth); 
strcat(join, input[4].fifth); 

printf("%s", join); 

這裏輸出,而不是給我

ABCCABACBAACCCB

給我只是

ABC

有人能告訴我我做錯了什麼嗎?

+0

只是問,你有'string.h'包括? –

+0

@SouravGhosh:是的。我有string.h和stdio.h包括 – Goldengirl

回答

6

寫,而不是

strcat(join, input[0].first); 
strcat(join, input[1].first); 
strcat(join, input[2].first); 
strcat(join, input[3].first); 
strcat(join, input[4].first); 

使用這些初始化

//... 
}input[5]= { 
     {"ABC", 101}, 
     {"CAB",102}, 
     {"ACB",103}, 
     {"AAC",104}, 
     {"CCB",105} 
}; 

你明確的初始化是firstfirst_id陣列中的每個元素的只有前兩個數據成員。所有其他數據成員都是零初始化的。

如果你想準確地使用你的陳述與strcat

strcat(join, input[0].first); 
strcat(join, input[1].second); 
strcat(join, input[2].third); 
strcat(join, input[3].fourth); 
strcat(join, input[4].fifth); 

然後初始化數組以下方式

struct searchTable 
{ 
    char first[10]; 
    int first_id; 
    char second[10]; 
    int second_id; 
    char third[10]; 
    int third_id; 
    char fourth[10]; 
    int fourth_id; 
    char fifth[10]; 
    int fifth_id; 

}input[5]= { 
     { .first = "ABC", .first_id = 101 }, 
     { .second = "CAB", .second_id = 102 }, 
     { .third = "ACB", .third_id = 103 }, 
     { .fourth = "AAC", .fourth_id = 104 }, 
     { .fifth = "CCB", .fifth_id = 105 } 
}; 

在這種情況下輸出將像

ABCCABACBAACCCB 
+0

謝謝你的幫助。我想知道如果我可以用for循環來實現這個嗎?這可能嗎? – Goldengirl

+0

@Goldengirl我不能想象如何使用定義的結構數據成員來完成它,就像它在你的例子中顯示的那樣。 –

+0

@Goldengirl也許你應該問一個新問題。 –

4

這裏的問題是,在定義時初始化時,你只是初始化每個input[n]元素的前兩個成員變量(檢查提供的初始化程序的數量)。所以,後來,一邊做

strcat(join, input[1].second); 
strcat(join, input[2].third); 
strcat(join, input[3].fourth); 
strcat(join, input[4].fifth); 

所有secondthirdfourthfifth成員變量input[n]元素被初始化爲0或空指針,因爲數組定義是全球性的。

輸出正確,它是此代碼的預期輸出。


說了這麼多,中main()推薦的簽名是int main(int argc, char *argv[]),或者至少,int main(void)

2

您的初始化程序不覆蓋struct searchTable的所有成員,只是input數組的每個元素的前兩個成員。其餘的都是用零隱式地初始化的。這樣的話:

strcat(join, input[1].second); 
strcat(join, input[2].third); 
... 

符連接空字符串,因爲所有這些都被視爲零長度,因爲它們開始(ASCII或NUL'\0'空字符。換句話說:

strlen(input[1].second) == 0 
strlen(input[2].third) == 0 
... 
2
input[5]= { 
     {"ABC", 101}, 
     {"CAB",102}, 
     {"ACB",103}, 
     {"AAC",104}, 
     {"CCB",105} 
}; 

你總是初始化前兩個成員。 i.e first and first_id

所以用全部替換[0] .first。這將工作肯定。

快樂編碼!!!!!!!

3

你聲明的結構十名成員

struct searchTable 
{ 
    char first[10]; 
    int first_id; 
    char second[10]; 
    int second_id; 
    char third[10]; 
    int third_id; 
    char fourth[10]; 
    int fourth_id; 
    char fifth[10]; 
    int fifth_id; 
} 

雖然分配值你提的這兩個值,所以前兩個值將被分配。其餘的變量將爲空。

strcat(join, input[1].second); 
strcat(join, input[2].third); 
strcat(join, input[3].fourth); 
strcat(join, input[4].fifth); 

如果你這樣做,你會得到這個輸出,就像你期望的那樣。

strcat(join, input[0].first); 
    strcat(join, input[1].first); 
    strcat(join, input[2].first); 
    strcat(join, input[3].first); 
    strcat(join, input[4].first); 
+0

「_如果你喜歡這樣,你會得到這個輸出,就像你期望的一樣。」「不。 –