我是C语言的新手,我很困惑如何读取文件并将每一行存储到数组的索引中。
示例文件:
天空是什么颜色?
红色
橙色
黄色
蓝色
所需的代码结果:
input [0] =天空是什么颜色?
输入[1] =红色
输入[2] = 橙色
输入[3] =黄色
输入[4] =蓝色
我到目前为止的位置在哪里
char input[60];
//declare string array of size 80, for 80 lines
for(int i = 0; fgets(input, sizeof(input), inFile)!=NULL; i++){
//string[i] = input; storing this line to the string index
}
//later on use the string[80] that now has all lines
我知道声明input[60]
只是确定每行的长度,而不是行数。我习惯于考虑其他编码语言中的字符串,以至于char的使用使我无法接受。我已经尝试过视频教程,但是它们并没有帮助我。
答案 0 :(得分:-1)
文件的每一行都是不同的字符串,每个字符串都是指向数组的char *指针;因此,您需要的是一维char *指针数组(或者是二维char指针数组)。
char *line[ MAX_LINES ]; // 1D array of char* pointers.
您可以初始化char的二维数组,也可以为1D char *指针的每一行m分配内存。
这是malloc方法的示例。它存储在其中的变量称为“行”而不是“输入”。但是您可以根据需要交换变量名称,并更改打印格式以解决您的特定问题。这只是作为以您希望的方式将字符串读入内存的示例。没有实际的系统具有少于4K的堆空间,因此我省略了malloc内存检查。
#include <string.h>
#include <malloc.h>
#include <stdio.h>
#define MAX_LINES 10
#define MAX_LEN 60
int main( int narg, char *arg[] ) {
char input[ MAX_LEN ];
char *line[ MAX_LINES ];
FILE *inFile;
int i,j;
if ( narg != 2 ){fprintf( stderr, "Use: %s filename\n", arg[0] ); return 2;}
if (!(inFile=fopen(arg[1],"r") )){
fprintf( stderr, "Can't open '%s'\n",arg[1]);
return 2;
}
for ( i=0; i<MAX_LINES && fgets(input, sizeof(input), inFile ); ++i ) {
int lineLen=strlen(input) + 1;
line[i] = strncpy( malloc( lineLen ), input, lineLen );
}
for ( j=0; j<i; ++j ) { printf( "Line %d:%s", j+1, line[j] ); free(line[j]); }
fclose(inFile);
return 0;
}