gpt4 book ai didi

c - 结构不取值

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:12 24 4
gpt4 key购买 nike

我的作业有问题。任务是从 txt 文件中读取一个字符串,并将其与指向结构的指针数组进行比较。如果该字符串已经出现,则将该结构的计数加 1,如果未找到,则将该字符串插入计数为 1 的数组中。
结构已定义:

struct wordfreq {
int count;
char *word;
}

代码如下:

#include <stdio.h>
#include <stdlib.h>

struct wordfreq {
int count;
char *word;
};

typedef struct wordfreq wordfreq;

int mystrcmp(char *str1, char *str2);


int main(int argc, char *argv[])
{
int i, j, flag, current, spot;
char *temp, *temp2;
FILE *infile, *outfile;
wordfreq *wordsptr[1000];
if (argc != 3)
{
printf("Invalid number of arguments, exiting\n");
return 1;
}
else
{
infile = fopen(argv[1], "r");
outfile = fopen(argv[2], "w");
if (infile == NULL)
{
printf("Error opening input file, exiting\n");
return 2;
}
if (outfile == NULL)
{
printf("Error opening output file, exiting\n");
return 3;
}
}
current = 0;
flag = 0;
for (i = 0; i < 1000; i++)
wordsptr[i] = NULL;
temp = (char *)calloc(20,sizeof(char));
while (fgets(temp, 20, infile) != NULL)
{
flag = 0;
for (i = 0; i < 20; i++)
if (temp[i] == '\n')
temp[i] = '\0';
printf("%s %d\n", temp, current);
wordsptr[current] = (wordfreq *)malloc(sizeof(wordfreq));
wordsptr[current]->word = (char *)malloc(20*sizeof(char));
(*wordsptr[current]).word = temp;
(*wordsptr[current]).count = 1;
current++;
}
for (i = 0; i < current; i++)
printf("%d %s\n", (*wordsptr[i]).count, (*wordsptr[i]).word);




free(temp);
for (i = 0; i < 1000; i++)
{
wordsptr[i] = NULL;
free(wordsptr[i]);
}
if (infile != NULL)
fclose(infile);
if (outfile != NULL)
fclose(outfile);
return 0;
}


int mystrcmp(char *str1, char *str2)
{
int i;
for (i = 0; str1[i] != '\0' || str2[i] != '\0';i++)
if (str1[i] != str2[i])
return 1;
return 0;
}

一些规定:
1) 必须将所有指针初始化为空
2) 必须使用指向结构的指针数组

运行:./assign6 words.txt freq.txt

文字.txt:

apple
orange
apple
orange
banana
banana

我收到的输出: 1根香蕉 1根香蕉 1根香蕉 1根香蕉 1根香蕉 1根香蕉

应该输出txt文件中字符串的个数和字符串本身到argv[2]指定的文件中。请帮忙!

最佳答案

你正在分配 temp 的地址,它在每次迭代中不断更新为新值,因此你在这里获得所有结构中最后一次迭代的字符串。这是由以下几行引起的:

wordsptr[current]->word = (char *)malloc(20*sizeof(char));
(*wordsptr[current]).word = temp;

(值得一提的是,这也是内存泄漏,因为您丢失了指向堆内存的指针。)

您应该改为使用 strcpy() 或类似的方法将字符从 temp 复制到 wordsptr[current]->word

关于c - 结构不取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43485066/

24 4 0
文章推荐: javascript - 使用 NodeJs 创建邮件服务
文章推荐: html -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com