如何将多个 char 变量与结构变量中的空格分隔值结合起来?

Posted

技术标签:

【中文标题】如何将多个 char 变量与结构变量中的空格分隔值结合起来?【英文标题】:How to combine multiple char variables with space separated values in a struct variable? 【发布时间】:2022-01-01 23:56:29 【问题描述】:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct donor
    
        char *name;
        char *code ;
        char *donor;
        char *ship;
        char *quant;
        char *id;
        char *string;
        struct donor *link;
     ;

typedef struct donor Donor;
char box[20];
int main()
    Donor *node = malloc(sizeof(Donor));
    node-> id = strdup("GA");
    node-> code = strdup("HI");
    node-> donor = strdup("TO");
    node-> ship = strdup("GD");
    node-> quant = strdup("UT");

    // Combine all nodes' value into box.
    sprintf(box, "%s %s %s %s %s", node->id, node->code, node->donor, node->ship, node->quant);
    printf("%s", box);
    node->string = strdup(box);
    printf("%s", node->string);


我创建了一个结构体捐助者并为所有节点/变量分配了一个两个字母的字符串。我希望我的 node->string 存储组合的“GA HI TO GD UT”字符串。我在这里尝试 sprintf 将所有节点的值复制到 char 框中,并且 node->string = strdup(box)。但在那之后它不会输出任何东西。有什么想法吗?

【问题讨论】:

你告诉sprintf你想打印多少个字符串,你实际提供了多少个??? 只有5个,我已经改正了,结果还是一样,没有输出。 添加换行符"%s\n"? 代码在 -fsanitnize=undefined,address 和 Valgrind 下运行良好(尽管有一些漏洞) 【参考方案1】:

3 处小修改。我编译并运行。所以试试这个:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    struct donor
        
            char *name;
            char *code ;
            char *donor;
            char *ship;
            char *quant;
            char *id;
            char *string;
            struct donor *link;
         ;

    typedef struct donor Donor;
    char box[20]= '\0';  /* force c string */
    int main()
        Donor *node = malloc(sizeof(Donor));
        node-> id = strdup("GA");
        node-> code = strdup("HI");
        node-> donor = strdup("TO");
        node-> ship = strdup("GD");
        node-> quant = strdup("UT");

        // Combine all nodes' value into box.
        sprintf(box, "%s %s %s %s %s", node->id, node->code, node->donor, node- 
                                         >ship, node->quant);
        printf("%s\n", box);            /*request line output */
        node->string = strdup(box);
        printf("%s\n", node->string);   /*request line output */
        fflush(stdout);                 /*final attempt to force output*/


如果仍然没有输出,则问题不是 C。可能是您的工具链、损坏的库 [重新安装]、IDE 配置 [直接从命令提示符运行],或者是操作系统级别的问题。

My results:
c:\jim3\tmpp\lcc>tmpp
GA HI TO GD UT
GA HI TO GD UT
c:\jim3\tmpp\lcc>

【讨论】:

以上是关于如何将多个 char 变量与结构变量中的空格分隔值结合起来?的主要内容,如果未能解决你的问题,请参考以下文章

编写程序,输入字符串(包含空格),统计其中单词的个数,单词之间以一个或多个空格分隔。

如何将awk中一个变量的值传递给shell中的变量

交互输入与for语句

学习shell第五天

shell_07--read与for语句

14 shell脚本--006交互输入与for语句