C 程序无法正确计算单词



我一直在尝试做一个程序来计算文本文件中的单词数。我一直在计算单词时遇到问题,我决定创建一个函数来做到这一点,因为我将用这个程序做其他事情(我真的很想创建一个文本编辑器,但我正在一点一点地这样做(。

问题是:

当我知道文本文件的字数要少得多时,我的程序会返回大量的计数单词。我在这里真正想学习的是如何遍历字符串数组中的字符[I][J].

附加信息:

  1. 如果我执行一个简单的循环来打印所有字符串,则进行计数的函数可以打印所有字符串。这意味着它已正确传递字符串。
  2. 我正在向函数发送正确的行数,我已经仔细检查过了。

这是我的代码:

你需要从这里开始:

int  totalLines = 0;
char **strings;

后来:

strings = malloc (sizeof(char *) * totalLines);

任何数字乘以零;)是多少?

为什么 malloc 不为空?

malloc() 函数分配大小字节并返回指向 分配的内存。 内存未初始化。 如果大小为 0 , 然后malloc()返回 NULL 或唯一指针值,该值可以 后来成功传递给free()

初始化number...这就是功能fWords中的问题。

从函数fWords返回number时,您将获得一个未初始化的值,这就是您获得一些"巨大"值的原因。

对于逻辑部分,单词只不过是一个或多个由空格分隔的字母。因此,计算字母块之间的间隙,这将是所需的计数。

fWord,它将for (j = 0; array[i][j] < length; j++)

正确使用malloc并检查返回值 malloc 如果您已使用零值进行分配。

if(malloc(...)) {//ok ...} else { // not allocated }

它们是您的代码的一些问题:

  • 这一行:

    strings = malloc (sizeof(char *) * totalLines);
    

    基本上是strings = malloc(0),因为你已经totalLines初始化为0。您应该改为分配初始大小,例如 totalLines = 10 ,然后根据需要realloc()

  • 使用这样的realloc()

    strings = realloc(strings, sizeof(char *) * (totalLines ) + 1 );
    

    很危险。如果strings NULL,那么您将无法访问strings。您可以改为执行以下操作:

    void *temp = realloc(strings, sizeof(char *) * (totalLines ) + 1);
    if (temp == NULL) {
        /* handle error */
    } else {
        strings = temp;
    }
    

    我还建议也许加倍totalLines,而不是每次都增加1。这是低效的,因为您需要在每个新行之后realloc()

  • 如果您决定使用 char content[MAX_LEN + 1]; ,那么您fgets()调用需要:

    fgets(content, MAX_LEN + 1, fp)
    

    fgets()需要它指向的数组的确切字节数。

  • 您还可以使用 perror() 从操作系统获取反馈:

    fp = fopen(argv[1], "r");
    if (fp == NULL) {
        perror(argv[1]);
        exit(EXIT_FAILURE);
    

相关内容

  • 没有找到相关文章

最新更新