(C编程)如何将字符串插入字符数组,然后打印出该数组的所有元素?

时间:2019-02-25 15:28:37

标签: c arrays string character

我有一个以字符数组temp形式表示的字符串。我想将此字符数组插入另一个数组temp_list,然后打印出此数组的内容。换句话说,将多个字符数组存储在单个数组中。谁能告诉我这是否可行,我该如何运作?

这是我要完成的工作的一个示例:

int main()
{
    char temp[5] = "begin";
    char temp_list [10];
    temp_list[0] = temp;

    for (int i = 0; i < strlen(temp_list); i++)
    {
        printf("Labels: %s,", temp_list[i]);
    }
}

当我运行该程序时,它会打印出乱码。

任何形式的指导将不胜感激。谢谢。

编辑:

谢谢您的回答。它们都是有用的。但是我还有另一个问题……如果我有多个要插入到temp_list的字符数组怎么办?多次使用strcpy似乎不起作用,因为我假设函数基本上用temp_list传递的字符串替换了strcpy的全部内容?

2 个答案:

答案 0 :(得分:4)

关于字符串有很多误解。您的数组temp必须足够大以存储空终止符,因此在这种情况下,其大小至少应为6

char temp[6] = "begin"; // 5 chars plus the null terminator

要复制字符串,请使用strcpy

char temp_list[10];
strcpy(temp_list, temp);

要打印它,请传递temp_list,而不是temp_list[i],也不需要该循环:

printf("%s\n", temp_list);

最终程序如下所示:

int main()
{
    char temp[6] = "begin";
    char temp_list[10];
    strcpy(temp_list, temp);
    printf("%s\n", temp_list);
    return 0;
}

答案 1 :(得分:4)

您在这里遇到三个问题。首先,temp的大小不足以容纳字符串“ begin”。 C中的字符串以null终止,因此该字符串实际上占用6个字节,而不是5个字节。因此,使temp足够大以容纳该字符串:

char temp[6] = "begin";

或更妙的是:

char temp[] = "begin";

完全根据字符串的大小调整数组的大小。第二个问题在这里:

temp_list[0] = temp;

您正在将一个数组(实际上是指向该数组第一个元素的指针)分配给另一个数组的第一个元素。这是将char *分配给char的类型不匹配。即使类型匹配,也不是如何复制字符串。为此,请使用strcpy函数:

strcpy(temp_list, temp);

最后,您无法正确打印结果:

for (int i = 0; i < strlen(temp_list); i++)
{
    printf("Labels: %s,", temp_list[i]);
}

%s格式说明符需要指向char数组的指针才能打印字符串,但是您要传递单个字符。格式说明符不匹配会调用undefined behavior

要打印单个字符,请改用%c

for (int i = 0; i < strlen(temp_list); i++)
{
    printf("Labels: %c,", temp_list[i]);
}

或者您可以摆脱循环,而仅使用%s打印整个字符串:

printf("Labels: %s", temp_list);