gpt4 book ai didi

c - 在结构中对 char* 进行排序 - 获取垃圾

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

我制作了一个 Node 结构数组,并尝试根据名为“word”的 char* 变量按字母顺序对节点进行排序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "memwatch.h"
#include "concord.h"

#define BUFFSIZE 1000

int main(int argc, char** argv)
{
Node** list;
printf("%s%s\n","The file name is ", argv[1]);
readInputFile(argv[1], list);
return 0;
}

int compareWords(const void* nodeA, const void* nodeB)
{
Node* nodeAA = (Node *) nodeA;
Node* nodeBB = (Node *) nodeB;
puts("now here\n");
printf("%s\n", nodeAA->word);
printf("%s\n", nodeBB->word);
return strcmp(nodeAA->word, nodeBB->word);
}

void readInputFile(char* filename, Node** wordList)
{
FILE* file;
file = fopen(filename, "r");
wordList = calloc(BUFFSIZE, sizeof(Node*));

char* currentWord;
currentWord = (char*) malloc(sizeof(char) *BUFFSIZE);
int i;
i = 0;
while(fscanf(file, "%s", currentWord) == 1)
{
wordList[i] = (Node*) malloc(sizeof(Node));
wordList[i]->word = strdup(currentWord);
puts(wordList[i]->word);
}
fclose(file);
qsort(wordList, i, sizeof(Node), compareWords);
}

在我尝试打印比较函数中的单词时打印出垃圾之前,现在看起来该函数甚至都没有被调用。

最佳答案

now it looks like the function is not even being called.

这是因为要对 0 元素的列表进行排序,您永远不需要比较两个元素:

  // ...
int i;
i = 0; // --- set to 0
while(fscanf(file, "%s", currentWord) == 1)
{
// i not changed ... causes other problems, too
// (contents omited)
}
fclose(file);
// i is still 0
qsort(wordList, i, sizeof(Node), compareWords);
// ...

除此之外,您对“输出参数”的使用是错误的,正如 David C. Rankin 在评论中指出的那样。在这种情况下,我还建议只使用返回值。

此外,我将该函数拆分为多个函数:

// Does the file opening and closing, calls readInput
Node * readInputFile(char const *);
// The actual reading
Node * readInput(FILE *)
// Probably do the sorting outside of these functions

关于c - 在结构中对 char* 进行排序 - 获取垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31085400/

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