如何将文本逐行存储到C语言中的2D数组中?

如何将文本逐行存储到C语言中的2D数组中?,c,C,再说一遍。我是C语言的新手。我仍然用Python术语来思考readlines,将它们附加到变量中,所以我很难将其转换为C语言。这就是我要做的:打开一个文本文件进行读取,将每一行逐行存储在数组中,打印出来以确保它被存储 这就是我所取得的成绩: int main(){ FILE * fp = fopen("sometext.txt", "r"); char text[100][100]; if(fp == NULL){ printf("File not found!"); } els

再说一遍。我是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; 
}

请不要一开始就投入更多的时间去寻找其他地方,因为这很容易,而且已经得到了答案。我不擅长这个,我正在努力。

你可以试试这个。基本上,您需要一个数组来存储每一行。找到文件中最长行的长度并为其分配空间。然后将指针倒回文件的开头,并使用FGET从文件中获取每一行,分配空间并将该行复制到相应的位置。希望这有帮助

#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);
}

你不需要复制就可以解决它

以下代码可以工作:

#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;
}

至少少了1个}看看你关在哪里了,20,fp!=空{是的,我在编辑时忘记了1}的可能重复项。顺便说一下,使用Tab在这里编辑是恼人的XDGETLIN是C++,不是内置在C函数中,所以它不工作