我有一个以字符数组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
的全部内容?
答案 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);