我正在尝试使用strcat
连接结构中的数组。我的代码如下:
int main(){
//Implementation of Search table Tree
struct searchTable
{
char first[10];
int first_id;
char second[10];
int second_id;
char third[10];
int third_id;
char fourth[10];
int fourth_id;
char fifth[10];
int fifth_id;
}input[5]= {
{"ABC", 101},
{"CAB",102},
{"ACB",103},
{"AAC",104},
{"CCB",105}
};
char join[100]={0};
strcat(join, input[0].first);
strcat(join, input[1].second);
strcat(join, input[2].third);
strcat(join, input[3].fourth);
strcat(join, input[4].fifth);
printf("%s", join);
这里输出而不是给我
ABCCABACBAACCCB
给了我
ABC
有人可以告诉我我做错了吗?
答案 0 :(得分:6)
改为写
strcat(join, input[0].first);
strcat(join, input[1].first);
strcat(join, input[2].first);
strcat(join, input[3].first);
strcat(join, input[4].first);
使用这些初始化程序
//...
}input[5]= {
{"ABC", 101},
{"CAB",102},
{"ACB",103},
{"AAC",104},
{"CCB",105}
};
您只显式初始化了first
和first_id
数组中每个元素的前两个数据成员。所有其他数据成员都是零初始化。
如果您想完全使用strcat
strcat(join, input[0].first);
strcat(join, input[1].second);
strcat(join, input[2].third);
strcat(join, input[3].fourth);
strcat(join, input[4].fifth);
然后按以下方式初始化数组
struct searchTable
{
char first[10];
int first_id;
char second[10];
int second_id;
char third[10];
int third_id;
char fourth[10];
int fourth_id;
char fifth[10];
int fifth_id;
}input[5]= {
{ .first = "ABC", .first_id = 101 },
{ .second = "CAB", .second_id = 102 },
{ .third = "ACB", .third_id = 103 },
{ .fourth = "AAC", .fourth_id = 104 },
{ .fifth = "CCB", .fifth_id = 105 }
};
在这种情况下,输出看起来像
ABCCABACBAACCCB
答案 1 :(得分:4)
这里的问题是,在定义时初始化时,您只是初始化每个input[n]
元素的前两个成员变量(检查提供的初始化程序的数量)。所以,稍后,一边做着
strcat(join, input[1].second);
strcat(join, input[2].third);
strcat(join, input[3].fourth);
strcat(join, input[4].fifth);
second
元素的所有third
,fourth
,fifth
和input[n]
成员变量都初始化为0
或空指针,因为数组定义是全局的。
输出正确,它是此代码的预期输出。
话虽如此,main()
的推荐签名为int main(int argc, char *argv[])
或至少为int main(void)
。
答案 2 :(得分:3)
您被宣布为具有十名成员的结构
struct searchTable
{
char first[10];
int first_id;
char second[10];
int second_id;
char third[10];
int third_id;
char fourth[10];
int fourth_id;
char fifth[10];
int fifth_id;
}
在分配值时,您提到了两个值,因此将分配前两个值。其余变量将为null。
strcat(join, input[1].second);
strcat(join, input[2].third);
strcat(join, input[3].fourth);
strcat(join, input[4].fifth);
如果您喜欢这样,您将获得此输出,就像您预期的那样。
strcat(join, input[0].first);
strcat(join, input[1].first);
strcat(join, input[2].first);
strcat(join, input[3].first);
strcat(join, input[4].first);
答案 3 :(得分:2)
您的初始值设定项不会涵盖struct searchTable
的所有成员,只会覆盖input
数组的每个元素的前两个成员。其他人用隐含的零初始化。那样:
strcat(join, input[1].second);
strcat(join, input[2].third);
...
与空字符串连接,因为所有这些都被视为零长度,因为它们以'\0'
(或ASCII中的NUL
) null字符开头。换句话说:
strlen(input[1].second) == 0
strlen(input[2].third) == 0
...
答案 4 :(得分:2)
input[5]= {
{"ABC", 101},
{"CAB",102},
{"ACB",103},
{"AAC",104},
{"CCB",105}
};
您始终在初始化前两个成员。 i.e first and first_id
所以用输入[0] .first替换all。这肯定会有效。
快乐编码!!!!!!!