将文本行存储在数组中,C [复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我是C的新手,我很困惑如何读取文件并将每一行存储到数组的索引中。

示例文件:

天空是什么颜色? 红色 橙子 黄色 蓝色

期望的代码结果:

输入[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会让我失望。我试过视频教程,但他们没有帮助我。

c arrays string char allegro
1个回答
-1
投票

文件的每一行都是不同的字符串,每个字符串都是一个指向数组的char *指针;所以你需要的是一个char *指针的一维数组(或者另外一个char数组的2D数组)。

char *line[ MAX_LINES ];  // 1D array of char* pointers.

您可以初始化char的二维数组,也可以为1D char *指针的每一行malloc内存。

这是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;                                                                   
}        
© www.soinside.com 2019 - 2024. All rights reserved.