为什么 'strcat' 函数不起作用?
Why isn't the 'strcat' function working?
我正在尝试使用 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
有人能告诉我我做错了什么吗?
这里的问题是,在定义时初始化时,您只初始化了每个 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
或 null-指针,因为数组定义是全局的。
输出正确,这是此代码的预期输出。
话虽如此,main()
的推荐签名是 int main(int argc, char *argv[])
或至少 int main(void)
。
您的初始化程序并未涵盖 struct searchTable
的所有成员,仅涵盖 input
数组每个元素的前两个成员。其他的都隐含地用零初始化。这样:
strcat(join, input[1].second);
strcat(join, input[2].third);
...
与空字符串连接,因为所有这些都被视为零长度,因为它们以 '[=14=]'
(或 ASCII 中的 NUL
)开头 空字符。换句话说:
strlen(input[1].second) == 0
strlen(input[2].third) == 0
...
改写
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
input[5]= {
{"ABC", 101},
{"CAB",102},
{"ACB",103},
{"AAC",104},
{"CCB",105}
};
您总是在初始化前两个成员。 i.e first and first_id
所以请首先将所有内容替换为输入[0]。这肯定会起作用。
Happy Coding !!!!!!!
您被声明为具有十个成员的结构
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;
}
在分配值时,您提到了两个值,因此将分配前两个值。其余变量将为空。
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);
我正在尝试使用 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
有人能告诉我我做错了什么吗?
这里的问题是,在定义时初始化时,您只初始化了每个 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
或 null-指针,因为数组定义是全局的。
输出正确,这是此代码的预期输出。
话虽如此,main()
的推荐签名是 int main(int argc, char *argv[])
或至少 int main(void)
。
您的初始化程序并未涵盖 struct searchTable
的所有成员,仅涵盖 input
数组每个元素的前两个成员。其他的都隐含地用零初始化。这样:
strcat(join, input[1].second);
strcat(join, input[2].third);
...
与空字符串连接,因为所有这些都被视为零长度,因为它们以 '[=14=]'
(或 ASCII 中的 NUL
)开头 空字符。换句话说:
strlen(input[1].second) == 0
strlen(input[2].third) == 0
...
改写
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
input[5]= {
{"ABC", 101},
{"CAB",102},
{"ACB",103},
{"AAC",104},
{"CCB",105}
};
您总是在初始化前两个成员。 i.e first and first_id
所以请首先将所有内容替换为输入[0]。这肯定会起作用。
Happy Coding !!!!!!!
您被声明为具有十个成员的结构
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;
}
在分配值时,您提到了两个值,因此将分配前两个值。其余变量将为空。
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);