繁体   English   中英

从标准输入读取 txt 文件并将整个文本存储到 char 数组中

[英]Read txt file from standard input and store whole text into char array

让我描述一下我正在尝试做的事情。

  1. 编译源代码并使用输入文本文件运行

    gcc main.c -o main

    ./main < 文本.txt

  2. 然后'text.txt'中的文本应该存储到一个变量中。 我不确定,但我认为这应该是 char 数组。

  3. 最终,我想循环遍历 'text.txt' 的每个字符及其索引; 在 python 它应该如下所示

    i = 0
    
    while i < len(string):
    
        print(string[i])
    
        if (~~~):
    
            i -= 10(or some other numbers)
    
        else:
    
            i += 1

需要考虑的几点

  1. i可以从第 i-10 个字符开始递减并再次打印。
  2. 程序不知道输入文本文件的长度。
  3. 我无法在源中指定文件目录; 输入文本必须通过终端中的标准输入。

我怎样才能在 C 中写这个?

以下是我在 C 中的尝试,但没有奏效。

int main(){
    char A;
    short i;

    scanf("%s", A);
    printf("%s", A);
    for (i=0; i < strlen(A); i++) {
        printf("%c", A[i]);
    }

    return 0;
}

您可以通过多种方式进行操作,让我们从获得适当长度的文件开始。

FILE *f = fopen("textfile.txt", "rb");
fseek(f, 0, SEEK_END); // goes to the end of file
long fsize = ftell(f); // tells what position in bytes is 
fclose (f)

f = fopen("textfile.txt", "r");

您注意到我正在使用rb或读取二进制文件。 那是因为要克服这样一个事实,即如果您在非二进制模式下使用fseek()ftell() ,您将陷入未定义的行为,结果可能在 Windows 机器和 (*)nix 机器之间有所不同。

现在如何将文本文件读入字符串。 有多种方式

  1. 不推荐使用getc()
  2. 使用fscanf()也不是首选,比getc()更好,因为它可以同时读取多个字节
  3. 使用fgets()您可以指定您读取的文件的大小,从而避免缓冲区溢出。

以上是快速而肮脏的阅读方式,不知道你的 DE 是什么样的(什么操作系统、编译器等)我可以 go 更详细地了解如何做到这一点,但 tnx 到 @Nail 这里是一篇文章,你可以阅读。 您可以使用它并为不同的操作系统设置标志,而不是使用我的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM