首页 > 解决方案 > 如何在C中填充字符串数组

问题描述

我目前正在学习 C,并试图用循环填充字符串数组作为一个简单的练习。我只是想用“你好”这个词来填充所有 4 个元素。当我打印出我的数组时,我得到如下输出:

messages[0] = HelloHelloHelloHello
messages[1] = HelloHelloHello
messages[2] = HelloHello
messages[3] = Hello

出于一个奇怪的原因,前 3 个元素的单词 hello 重复了多次。我不明白为什么会这样。

这是我的代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){

char messages[4][5];

for(int i = 0; i < 4; i++){
    //&messages[i] =  (char *)malloc(5);
    strcpy(messages[i],"Hello");
}

for(int i = 0; i < 4; i++){

    printf("messages[%d] = %s\n", i, messages[i]);
}

return 0;
 }

我也尝试寻找方法来做到这一点,我发现了一些关于使用 malloc 的东西,但我只是不断收到编译器错误。

标签: c

解决方案


您尚未为空终止符分配内存。 char messages[4][5];应该char messages[4][6];

在此处输入图像描述

因为没有空终止符。printf 打印字符,直到找到空终止符。最后一个 strcpy 复制\0超出您分配的内存。这是未定义的行为。


推荐阅读