簡體   English   中英

如何將文本逐行存儲到 C 中的二維數組?

[英]How to store text, line by line, to a 2D array in C?

再次。 我是 C 的新手。仍然用 Python 術語思考(readlines,將它們附加到變量)所以我很難將它翻譯成 C。這就是我想做的:打開一個文本文件進行閱讀,將每一行存儲在一行一行的數組,打印出來以確保它被存儲。

這是我有多遠:

int main(){

FILE * fp = fopen("sometext.txt", "r"); 

char text[100][100];

if(fp == NULL){
    printf("File not found!");
}
else{
    char aLine[20];

    int row = 0;
    while(fgets(aLine, 20, fp) != NULL){

    printf("%s", aLine);
    //strcpy(text[row], aLine); Trying to append a line (as row)
    return 0; 
}

請不要以“投資更多時間並尋找其他地方,因為它很容易並且已經得到回答”開始。 我不擅長這個,我正在努力。

你可以試試這個。 基本上你需要一個數組來存儲每一行​​。 您找到文件中最長行的長度並為其分配空間。 然后將指針倒回到文件的開頭並使用 fgets 從文件中獲取每一行並使用strdup分配空間並將該行復制到相應的位置。 希望這可以幫助。

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

int main(int argc, char *argv[]) {
    FILE * fp = fopen("sometext.txt", "r");
    int maxLineSize = 0, count = 0;
    char c;

    while ((c = fgetc(fp)) != EOF) {
        if (c == '\n' && count > maxLineSize) maxLineSize = count;
        if (c == '\n') count = 0;
        count++;
    }
    rewind(fp);

    char ** lines = NULL;
    char * line = calloc(maxLineSize, sizeof(char));
    for (int i = 0 ; fgets(line, maxLineSize + 1, fp) != NULL ; i++) { // +1 for \0
        lines = realloc(lines, (i + 1) * sizeof(char *));
        line[strcspn(line, "\n")] = 0; // optional if you want to cut \n from the end of the line
        lines[i] = strdup(line);
        printf("%s\n", lines[i]);
        memset(line, maxLineSize, '\0');
    }

    fclose(fp);
}

不用copy就可以解決

以下code可以工作:

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

int main()
{
    FILE * fp = fopen("sometext.txt", "r");
    if(fp == NULL){
        printf("File not found!");
        return -1;
    }
    char text[100][20];

    int row = 0;
    while(row < 100 && fgets(text[row], sizeof(text[0]), fp) != NULL)
        ++row;
    for (int i= 0; i != row; ++i)
        fputs(text[i], stdout);
    return 0;
}

暫無
暫無

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

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