c - 将文本行存储在数组中,C

标签 c arrays string char allegro

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

示例文件:

What color is the sky?
Red
Orange
Yellow
Blue

期望的代码结果:

input[0] = What color is the sky?
input[1] = Red
input[2] = Orange
input[3] = Yellow
input[4] = Blue

这是我到目前为止所拥有的:

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 的使用让我感到厌烦。我尝试过视频教程,但它们对我没有帮助。

最佳答案

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

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

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

这是 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;                                                                   
}        

关于c - 将文本行存储在数组中,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52398698/

相关文章:

c - 在C中输出两个二进制字符串及其十进制值相加的结果

javascript - 从数组中删除一定范围的元素

c - C常量字符串是否总是以null结尾?

python - 使用嵌套 for 循环和 if 语句将字符替换为整数

c++ - 释放分配给空指针数组的内存

将递归函数更改为非递归函数

c - 具有段错误的快速排序程序

c - 获取具有多个 '/000' 字符的字符串的大小

arrays - 我的搜索算法(类似于冒泡排序)的最佳和最坏情况运行时间?

c - strtok 不会接受 : char *str