首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“strcat”函数不能工作?

为什么“strcat”函数不能工作?
EN

Stack Overflow用户
提问于 2015-07-20 11:29:26
回答 5查看 235关注 0票数 3

我正在尝试使用strcat从结构中连接数组。我的代码如下:

代码语言:javascript
复制
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

有人能告诉我我做错了什么吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-07-20 11:33:58

代写

代码语言:javascript
复制
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);

使用这些初始化器

代码语言:javascript
复制
//...
}input[5]= {
        {"ABC", 101},
        {"CAB",102},
        {"ACB",103},
        {"AAC",104},
        {"CCB",105}
};

您只显式地初始化数组每个元素的前两个数据成员,即firstfirst_id。所有其他数据成员都是零初始化的。

如果您想在strcat中准确地使用语句

代码语言:javascript
复制
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);

然后以下列方式初始化数组

代码语言:javascript
复制
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 }
};

在这种情况下,输出将类似于

代码语言:javascript
复制
ABCCABACBAACCCB
票数 6
EN

Stack Overflow用户

发布于 2015-07-20 11:33:17

这里的问题是,在定义时初始化时,您只初始化每个input[n]元素的前两个成员变量(检查提供的初始化器数量)。所以,稍后,在做

代码语言:javascript
复制
strcat(join, input[1].second);
strcat(join, input[2].third);
strcat(join, input[3].fourth);
strcat(join, input[4].fifth);

所有secondthirdfourthfifth成员变量都被初始化为0或空指针,因为数组定义是全局的。

输出是正确的,这是该代码的预期输出。

尽管如此,推荐的main()签名是int main(int argc, char *argv[]),或者至少是int main(void)

票数 4
EN

Stack Overflow用户

发布于 2015-07-20 11:43:04

你被宣布为由十名成员组成的结构

代码语言:javascript
复制
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。

代码语言:javascript
复制
strcat(join, input[1].second);
strcat(join, input[2].third);
strcat(join, input[3].fourth);
strcat(join, input[4].fifth);

如果您这样做,您将得到这个输出,正如您所期望的那样。

代码语言:javascript
复制
    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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31515347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档