2013-03-11 103 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”。

相关问题