如何将多个 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 变量与结构变量中的空格分隔值结合起来?的主要内容,如果未能解决你的问题,请参考以下文章