c -我如何保存一个字符变量成一个字符*结构?



我的任务是计算一个数字的阶乘,保存到一个结构中,然后打印出来。

下面是结构的代码:
struct fact_entry
{                               /* Definition of each table entry */
int n;
long long int lli_fact;       /* 64-bit integer */
char *str_fact;
};

之后是下一个代码。我已经定义了一个long long int变量来计算阶乘,并且在将这个数字保存在结构的第一个元素中没有问题,打印函数正常工作。问题在于char *str_fact;变量,我写了一个代码,用sprintf将int值更改为char,但是在我将这个值赋给结构体之后,在下一个for循环中,它只打印计算的最后一个元素。如果我尝试在第一个for循环中打印它,一切都正常,但在外面它只打印最后一个。

int
main (int argc, char *argv[])
{
int n;
int i;
struct fact_entry *fact_table;
if (argc != 2)
panic ("wrong parameters");
n = atoi (argv[1]);
if (n < 0)
panic ("n too small");

if (n > LIMIT)
panic ("n too big");
/* Your code starts here */
// Allocate memory
// Compute fact(n) for i=0 to n
fact_table = calloc(n+1, sizeof(struct fact_entry));
long long int f=1;
char buf[20];
for (i = 0; i <= n; i++)
{
if (i == 0) { 
f = f * i + 1;;
}
else{
f=f*i;
}

sprintf(buf, "%lld", f);
printf("%sn", buf);
fact_table[i].n = i;
fact_table[i].lli_fact = f;
fact_table[i].str_fact = buf;      
}
/* Your code ends here */
// print computed numbers
for (i = 0; i <= n; i++)
{
printf ("%d %lld %sn", fact_table[i].n, fact_table[i].lli_fact, fact_table[i].str_fact);
}
/* Your code starts here */
// Free memory
free(fact_table);
/* Your code ends here */
return 0;
}

如何将buf变量写入结构中。我只能改变/*your code */

之间的代码
char buf[20];
...
fact_table[i].str_fact = buf;

str_fact为指针,指向buf。您有n + 1个元素,它们都指向相同的buf,它们都打印您在输出中看到的最后一个元素。

您必须为每个str_fact分配内存,以便它可以存储自己的字符串。

for (i = 0; i <= n; i++)
{
...
//fact_table[i].str_fact = buf; *** remove this line
fact_table[i].str_fact = malloc(strlen(buf) + 1);
strcpy(fact_table[i].str_fact, buf);
}
for (i = 0; i <= n; i++)
free(fact_table[i].str_fact);
free(fact_table);

注意,您正在分配n + 1元素。如果需要n元素,则在所有循环中一直数到i < n

相关内容

  • 没有找到相关文章

最新更新