簡體   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