我对C编程很陌生,刚刚开始研究文件。我想知道是否可以逐行读取文件(包括每行中的空格)到一个大小等于文件中行数的数组。我真的不知道从哪里开始,或者这是否可能,所以任何指导都会非常感激。
示例
以下形式的文本文件:
Computer Programming
Software Engineering
Computer Architecture
写入数组,以便:
char array[4];
array[0] = "Computer Programming";
array[1] = "Software Engineering";
array[2] = "Computer Architecture";
到目前为止,我所拥有的只是:
int main()
{
char array[50];
bool answer;
FILE *classes;
classes = fopen("classnames.txt", "r");
if(classes == NULL){
printf("\n ************* ERROR *************\n");
printf("\n \"classnames.txt\" cannot be opened.\n");
printf("\n PROGRAM TERMINATED\n");
exit(EXIT_FAILURE);
}
接下来我想将每个类名写入数组的每个元素。
答案 0 :(得分:1)
是的,您只需要将array
声明为char**
并在阅读每一行时动态分配。 E.g。
int MAX_NUM_LINES = 1000;
int MAX_LINE_LEN = 256;
char** array;
malloc(array, MAX_NUM_LINES*sizeof(char*));
fp = fopen(...);
int line_ct = 0;
char line[MAX_LINE_LEN];
while ( fgets(line, MAX_LINE_LEN, fp) != NULL )
{
int len = strlen(line);
malloc(array[line_ct], len * sizeof(char));
strcpy(array[line_ct], line);
line_ct++;
}
我实际上并没有尝试编译这段代码,但是这样的东西会起作用。你也可以先用快速的runthrough替换MAX_NUM_LINES
和计算行数 - 这可能是最好的。
答案 1 :(得分:0)
这是一种可能的方法的例子
#include <stdio.h>
#include <string.h>
int main()
{
char array[100][100];
char line[100];
size_t arraySize;
size_t count;
FILE *file;
const char *filepath;
filepath = "<put the file path here>";
file = fopen(filepath, "r");
if (file == NULL)
{
perror("fopen()");
return -1;
}
count = 0;
arraySize = sizeof(array) / sizeof(array[0]);
while ((fgets(line, sizeof(line), file) != NULL) && (count < arraySize))
{
size_t length;
length = strlen(line);
if (line[length] == '\0')
line[--length] = '\0';
memcpy(array[count++], line, 1 + length);
}
fclose(file);
return 0;
}