我正在尝试使用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
有人能告诉我我做错了什么吗?
发布于 2015-07-20 11:33:58
代写
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发布于 2015-07-20 11:33:17
这里的问题是,在定义时初始化时,您只初始化每个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成员变量都被初始化为0或空指针,因为数组定义是全局的。
输出是正确的,这是该代码的预期输出。
尽管如此,推荐的main()签名是int main(int argc, char *argv[]),或者至少是int main(void)。
发布于 2015-07-20 11:43:04
你被宣布为由十名成员组成的结构
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);https://stackoverflow.com/questions/31515347
复制相似问题