如何使用strcpy将字符串复制到字符串数组中?

时间:2013-03-11 10:35:12

标签: c string malloc strcpy

我正在尝试将字符串复制到字符串数组中,但它不起作用。我知道这是一个问题,因为内存分配,但我不知道如何使它工作,因为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"

3 个答案:

答案 0 :(得分:4)

一个问题是你在以下循环中跑过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]

答案 1 :(得分:2)

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

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

由于数组索引从零开始,从0运行到N - 1,其中N是数组中元素的数量。这意味着message_ecran的有效数组索引仅为01,但2将用作for循环中的索引。改为:

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

答案 2 :(得分:0)

此外,你可以从1开始你的循环

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

因为您稍后在第0个位置分配'texte3'。