gpt4 book ai didi

c - 带有结构数组字段的 sprintf - 出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:51:04 24 4
gpt4 key购买 nike

这个想法是按照模块内的结构格式化文本信息消息。当尝试使用(cf module.c)定义消息时,它就像一个魅力:

/*this works*/
module_text3.info_text[0] = "toto[0]";
module_text3.info_text[1] = "toto[1]";

但是当使用 sprintf 时,我遇到了段错误(参见 module.c):

/*this gives segmentation fault*/
for(cpt=0; cpt < 2; cpt++)
{
sprintf(module_text3.info_text[cpt], "info[%u]", cpt);
}

3 个不同的文件:main.c、module.h 和 module.c

/*main.c*/
/*gcc -o test main.c module.c*/
#include <stdio.h>
#include "module.h"

int main(int argc, char **argv)
{
int i;
struct message3 *ptext3 = moduleFcn3();

for (i= 0; i < ptext3->info_nb; i++)
{
printf("ptext3->info_text[%u]: %s\n", i, ptext3->info_text[i]);
}
printf("ptext3->error_text: %s\n", ptext3->error_text);
printf("ptext3->id: %u\n", ptext3->id);
printf("ptext3->info_nb: %u\n", ptext3->info_nb);
printf("ptext3->info_nb_max: %u\n", ptext3->info_nb_max);

return 0;
}
/*------------------------------------------------------*/
/*module.h*/

#define NB_LINE_MAX 10
struct message3
{
char *info_text[NB_LINE_MAX]; /*a few info lines.*/
char *error_text; /*only one line for error.*/
int id;
int info_nb_max;
int info_nb;
};

extern struct message3* moduleFcn3(void);

/*------------------------------------------------------*/
/*module.c*/
#include <stdio.h>
#include "module.h"

/*static is in "Stack".*/
static struct message3 module_text3;

struct message3* moduleFcn3(void)
{
int cpt = 0;
struct message3 *ptext;

/*this gives segmentation fault*/
for(cpt=0; cpt < 2; cpt++)
{
sprintf(module_text3.info_text[cpt], "info[%u]", cpt);
}

/*this works*/
// module_text3.info_text[0] = "toto[0]";
// module_text3.info_text[1] = "toto[1]";
// cpt = 2;

module_text3.error_text = "This is error";
module_text3.id = 4;
module_text3.info_nb_max = NB_LINE_MAX;
module_text3.info_nb = cpt;

ptext = &module_text3;

return ptext;
}

对于如何格式化我的信息消息(使用我们的而不使用 sprintf)的任何建议,我将不胜感激。谢谢,

最佳答案

您尚未为 info_text 字段中的字符串分配空间。最简单的事情就是更改struct:

/*module.h*/

#define NB_LINE_MAX 10
#define INFO_MAX 25

struct message3
{
char info_text[NB_LINE_MAX][INFO_MAX]; /*a few info lines.*/
char *error_text; /*only one line for error.*/
int id;
int info_nb_max;
int info_nb;
};

extern struct message3* moduleFcn3(void);

关于c - 带有结构数组字段的 sprintf - 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com