簡體   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