如何用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"

一个问题是您在以下循环中运行了message_ecran的末尾:

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

由于message_ecran[NUMBER_OF_STRINGS]越界,试图将strcpy()放入其中会导致未定义的行为。

edit关于你的编辑,我无法重现这个问题。当我在您的最新代码中添加以下内容时:

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

打印出

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

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

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++)

此外,您可以从1 ie

开始循环。
for (i = 1; i < NUMBER_OF_STRINGS; i++)

因为您稍后将在第零位置分配'texte3'。

相关内容

  • 没有找到相关文章

最新更新