将文本行存储在数组C

时间:2018-09-19 05:28:38

标签: c arrays string char allegro

我是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的使用使我无法接受。我已经尝试过视频教程,但是它们并没有帮助我。

1 个答案:

答案 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;                                                                   
}