2013-03-11 124 views
1

我想將一個字符串複製到一個字符串數組中,但它不起作用。我知道這是由於內存分配造成的一個問題,但我不明白如何使它工作,因爲STRING_LENGTH是一個常量。 message_ecran的如何將字符串複製到帶有strcpy的字符串數組中?

#define NUMBER_OF_STRINGS 3 
#define STRING_LENGTH 255 
char message_ecran[NUMBER_OF_STRINGS][STRING_LENGTH]; 

int i; 
char texte3[] = "CVC"; 
char texte7[] = "iiiiiiiii"; 

for (i=0;i<=NUMBER_OF_STRINGS;i++) 
{ 
    strcpy(message_ecran[i], texte7); 
} 
strcpy(message_ecran[0], texte3); 

值的代碼之後:

"CVC" 
null 
"iiiiiiiii" 

預期值

"CVC"  
"iiiiiiiii" 
"iiiiiiiii" 
+0

它不工作=> cf編輯 – edi9999 2013-03-11 10:41:17

+0

你如何檢查'message_ecran'的值? – hmjd 2013-03-11 10:45:59

+5

此外,您不應編輯問題以迴應答案中提供的更正。這讓後來人們質疑這個問題。 – hmjd 2013-03-11 10:47:32

回答

3

的一個問題是,你跑過去的message_ecran在下面的循環結束:

for (i=0;i<=NUMBER_OF_STRINGS;i++) 

由於message_ecran[NUMBER_OF_STRINGS]超出範圍,因此嘗試將strcpy()導入到結果undefined behaviour

編輯關於您的編輯,我無法重現該問題。當我將以下內容添加到您的最新代碼:

for (i = 0; i < NUMBER_OF_STRINGS; i++) { 
    printf("%d:[%s]\n", i, message_ecran[i]); 
} 

它打印出

0:[CVC] 
1:[iiiiiiiii] 
2:[iiiiiiiii] 
+0

(i = 0; i <= NUM​​BER_OF_STRINGS; i ++)這樣可以嗎? – kaitian521 2013-03-11 10:38:54

+0

問題不在於for循環,而在於循環外部的strcpy。循環外部的副本將message_ecran [1]設置爲空 – edi9999 2013-03-11 10:46:39

+4

@ edi9999:改變問題以回答答案是一種糟糕的形式。它不會幫助網站的未來用戶,它只是混淆了每個人。無論如何,我無法重現您報告的最新問題。 – NPE 2013-03-11 10:52:31

2

的代碼已經不確定的行爲,因爲它訪問超過數組的邊界,在這一行:

for (i=0;i<=NUMBER_OF_STRINGS;i++) 

由於數組索引是從零開始的,並且從0N - 1,其中N是數組中元素的數量。這意味着message_ecran的有效數組索引僅爲01,但2將用作for循環中的索引。更改爲:

for (i=0;i<NUMBER_OF_STRINGS;i++) 
0

除此之外,您還可以從1即

for (i = 1; i < NUMBER_OF_STRINGS; i++) 

開始你的循環,因爲你以後在零的位置分配「texte3」。

相關問題