gpt4 book ai didi

c - 如何在 C 中将文本逐行存储到二维数组?

转载 作者:行者123 更新时间:2023-11-30 19:04:02 25 4
gpt4 key购买 nike

再次。我是 C 新手。仍然用 Python 术语思考(读取行,将它们附加到变量),所以我在将其转换为 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);
}

关于c - 如何在 C 中将文本逐行存储到二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53065452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com