繁体   English   中英

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

[英]How to copy the string into the array of strings with 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()插入它会导致未定义的行为

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM