【发布时间】:2019-07-06 19:21:21
【问题描述】:
我正在尝试将动态分配的 char 数组初始化为名为 term 的结构中的不同类型,该结构是一个包含多项式(系数、var、指数)部分的结构。该函数是一个 to_string 函数,它以形式字符串“cx^e”或“c”形式返回结构项,如果项的指数为 0。
我相信我对创建字符串的整体思考过程是正确的,但是我不知道我是否正确初始化了我的 char *ptr。
相关代码如下:
to_string 函数
char *term_to_string(const term_t *term)
{
char *ptr;
if (term->exponent == 0)
{
ptr = (char *) malloc(sizeof(term->coefficient));
memset(ptr, 'x', sizeof(term->coefficient));
*ptr = term->coefficient;
}
else if (term->coefficient == 1)
{
ptr = (char *) malloc(sizeof (term->var) + sizeof (term->exponent) + sizeof (char));
*ptr = term->var;
*(ptr + 1) = '^';
*(ptr + 2) = term->exponent;
}
else
{
ptr = (char *) malloc(sizeof(term->coefficient) +
sizeof(term->var) +
sizeof(term->exponent) +
sizeof(char));
*ptr = term->coefficient;
*(ptr + 1) = term->var;
*(ptr + 2) = '^';
*(ptr + 3) = term->exponent;
}
return ptr;
}
结构“术语”
typedef struct term
{
int exponent, coefficient;
char var;
} term_t;
测试 to_string
term_t testterm1 = {1, 'x', 0};
term_t testterm2 = {2, 'x', 1};
term_t testterm3 = {3, 'x', 2};
printf("Testing term.c/h:\n");
printf("testterm1: %s\n", term_to_string(&testterm1));
printf("testterm2: %s\n", term_to_string(&testterm2));
printf("testterm3: %s\n", term_to_string(&testterm3));
我不断收到分段错误错误,我知道这与尝试初始化 NULL 指针有关。但是,我很困惑:
1) 我应该将指针分配到什么大小? (我现在在 if 语句的第一个块中使用 sizeof(term->coefficient))
2) 如果我正确地初始化了我的指针? (我在 if 语句的第一个块中使用了memset,但我真的认为我根本没有正确使用它)
预期的结果应该是
x
2x
3x^2
任何帮助将不胜感激!!!
【问题讨论】:
-
str未初始化。 -
我删除了
str并返回了 ptr 但它仍然给我同样的错误 -
这完全是不可挽回的错误。报废它。字符串不能以这种方式工作。使用
snprintf格式化您的术语(并再次调用snprintf以确定您需要分配多少空间)。
标签: c