簡體   English   中英

如何從C語言中讀取文件並將其保存為memory中的字符串,獲取存儲的字符串並將其切割成特定長度? 關於 linux LF 格式

[英]How do I read files from language C and save them as strings in memory, get the stored strings and cut them into a specific length? on linux LF format

我想將字符串作為數組處理,將其切割成特定長度,並將其存儲在二維數組中。 例如,我有 20 行文本文件。 像這樣的“input.txt”

www.google.com
www.naver.com
kbphonemall.com
kbplant.com
k-bplus.com
kbpointreestore.com
kbprint.com
kbprism.com
kbprivatebanking.com
kbpstore.com
kbr9rtudaf5ppy.com
kbrafting.com
kbraille.com
kbrainbank.com
kbrainbow.com
kbrainc.com
kbrainglocal.com
kbrandexpo.com
kbrandingschool.com
kbrandmall.com

然后,我閱讀了這個文件並嘗試使用“\n”作為鍵在每一行上裁剪它。例如,如果你想一次裁剪四行,你應該先裁剪到“kbplant.com”。然后截斷的字符串看起來像這樣。

www.google.com\nwww.naver.com\nkbphonemall.com\nkbplant.com\n

然后它將存儲在一個指針數組中。 像這樣

char *cutting[n];
cutting[0] = "www.google.com\nwww.naver.com\nkbphonemall.com\nkbplant.com\n"
cutting[1] = "k-bplus.com\nkbpointreestore.com\nkbprint.com\nkbprism.com\n"
.... more

到目前為止,這是對我要實現的功能的解釋,我將向您展示代碼。

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

#define IPATH "input.txt"

int main(int argc, char *argv[]) {

    char *ListBuffer;
    int ListSize;

    FILE *InputFile = fopen(IPATH, "r");

    fseek(InputFile, 0, SEEK_END);
    ListSize = ftell(InputFile);

    ListBuffer = malloc(ListSize);
    memset(ListBuffer, 0, ListSize);

    fseek(InputFile, 0, SEEK_SET);
    fread(ListBuffer, ListSize, 1, InputFile);

    int count = 0;
    ListBuffer[ListSize] = '\0'; //add NULL word

    for (int i = 0; i <= ListSize; i++) {
        if (ListBuffer[i] == '\n') {
            count++;
            if (count == 4) {
                printf("c%d\n", i);
                count = 0;
            }
        }
        if (ListBuffer[i] == 0) {
            printf("c%d\n", i);
            count = 0;
        }
    }

    fclose(InputFile);
    free(ListBuffer);
    ListBuffer = NULL;
}

這是我的代碼 我使用了strcpy function、 strtok function、 memcpy function等各種功能,但是很難實現想要的function。有沒有更好的方法或算法?

如果您需要更多解釋,我會盡快答復。

如果您能回復,我將不勝感激。 祝你有美好的一天。

目前還不清楚你在主循環中試圖實現什么,但還有更多問題:

  • 您必須額外分配一個字節以在 ListSize 處設置 null 終止ListSize

    ListBuffer = malloc(ListSize + 1);

  • 使用memset將數組設置為0是沒有用的:使用calloc(1, ListSize + 1)進行分配對於此目的會更有效,但是由於您將內容讀入數組,因此先清除它是沒有用的。

  • fread可能會返回一個短計數,例如在遺留系統的文本模式下,將 CR/LR 序列轉換為換行字節\n會減少讀取的字節數:

     ListSize = fread(ListBuffer, 1, ListSize, InputFile); ListBuffer[ListSize] = '\0'; // set the null terminator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM