2

我正在尝试将一个字符串复制到一个字符串数组中,但它不起作用。我知道这是由于内存分配造成的问题,但我不知道如何使它工作,因为 STRING_LENGTH 是一个常数。

#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);

代码后 message_ecran 的值:

"CVC"
null
"iiiiiiiii"

期望值

"CVC"    
"iiiiiiiii"
"iiiiiiiii"
4

3 回答 3

4

message_ecran一个问题是您在以下循环中运行结束:

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

由于message_ecran[NUMBER_OF_STRINGS]超出范围,因此尝试strcpy()进入它会导致未定义的行为

编辑关于您的编辑,我无法重现该问题。当我将以下内容添加到您的最新代码时:

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

它打印出来

0:[CVC]
1:[iiiiiiiii]
2:[iiiiiiiii]
于 2013-03-11T10:36:53.427 回答
2

该代码具有未定义的行为,因为它在此行超出了数组的边界:

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

因为数组索引是从零开始的,并且从0到数组N - 1N的元素数。这意味着有效的数组索引message_ecran01仅,但2将用作for循环中的索引。改成:

for (i=0;i<NUMBER_OF_STRINGS;i++)
于 2013-03-11T10:37:29.750 回答
0

此外,您可以从 1 开始循环,即

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

因为您稍后将在第零个位置分配“texte3”。

于 2013-03-11T11:38:09.207 回答