在C中逐行读取一个txt文件

read a txt file line by line in C

我正在尝试从 txt 文件中收回字符串。

文件内容为;

  1. 苹果
  2. 橙色

基本上每一行都有一个单词,我想读取每一行并将单词缩回字符串 char* word[25] 因为较长的单词是 24 个字符。当我实现一个简单的代码来读取每行之间 ASCII 中的每个字符时,行尾的值 10 。因此,我创建了一个没有任何条件的 for 循环,并添加了 if 条件以发现行尾 (LF) 的 10 值。但它不起作用,我确定我搞砸了一些非常基本的代码或逻辑。抱歉,如果我的代码看起来不合逻辑或非常错误,我是相当新的。还有很多库添加了,因为如果我可以完成这一步,我将使用它们。 TIA

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

int main(int argc, char *argv[])
{
    if (argc < 2)
    {
        printf("Usage: ./word filename\n");

        return 1;
    }
    
    FILE* ptr = fopen(argv[1], "r");
    
    char ch;
    char* word[45];
    
    for (int i = 0; ;i++)
    {
        ch = fgetc(ptr);
        
        word[i] = &ch;
        
        if (ch == 10)
        {
            break;
        }
    }
    printf("%s\n", *word);

    return 0;
}

终端输出

~/snippets/ $ make word
clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow    word.c  -lcrypt -lcs50 -lm -o word
~/snippets/ $ ./word lec3.txt

`
 ~/snippets/ $ 

如果你放弃指针会怎么样..

char ch;
char word[45];    
for (int i = 0; ;i++)
{
    ch = fgetc(ptr);
    word[i] = ch;
    if (ch == 10)
    {
        break;
    }
}
printf("%s\n", word);

你也可以动态地做:

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

int main(int argc, char **argv)
{
    if (argc < 2)
    {
        printf("Usage: ./word filename\n");
        return 1;
    }
    FILE *ptr = fopen(argv[1], "r");
    char ch;
    int i = 0;
    char *word = calloc(45, sizeof(char)); 
    for (ch = fgetc(ptr); ch != EOF; ch = fgetc(ptr), i++)
    {
        if (ch == '\n')
            break;
        word[i] = ch;
    }
    printf("%s\n", word);
    free(word);
    return 0;
}