为什么我不能在此代码中使用定界符正确提取令牌?
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
,它应该会更好。
我正在编写代码以从 .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
,它应该会更好。