为什么我不能在此代码中使用定界符正确提取令牌?

Why can't I properly extract tokens using delimiters in this code?

我正在编写代码以从 .txt 文件中提取所有单词,但 运行 遇到了麻烦。我只想允许字母和撇号,因此我选择了分隔符。这是我的代码:

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


int main()
{
    const char *separators =
    "\n\r !\"#$%&()*+,-./0123456789:;<=>?@[\]^_`{|}~";
    size_t len = 1000;
    char *word2 = (char *)malloc(len);
    FILE *file2 = fopen("words.txt", "r");
    if (file2 == 0)
    {
        fprintf(stderr, "Failed to open second file for reading\n");
        exit(EXIT_FAILURE);
    }
    while (fgets(word2, sizeof(word2), file2))
    {
        char *token = (char*)strtok(word2, separators);
        while (token != NULL)
        {
            printf("%s", token);
            printf("\n");
            token = strtok(NULL, separators);
        }
    }

    return 0;
}

这是 words.txt 中的内容:

This is a sentence in the file

我的输出结果是

This
is
a
sent
ence
in
the
fi
le

有人知道这是为什么吗?

这是因为 sizeof(word2) 是 4(word2 是一个指针,所以它有 4 个字节长)。所以你只需要从输入文件中获取 4 个字节。在你的 fread 中使用 len,它应该会更好。