。我是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;
}
请不要以“花更多的时间来寻找其他地方,因为它很容易并且已经得到答案”开头。我对此很不好,我正在尝试。
答案 0 :(得分:1)
您可以尝试一下。基本上,您需要一个数组数组来存储每一行。您在文件中找到最长的行的长度,并为其分配空间。然后将指针倒退到文件的开头,并使用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);
}
答案 1 :(得分:0)
您可以不用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;
}