C语言 将表放入内存

3phpmpom  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(134)

我必须从一个txt文件中读取一个表,然后将值写入内存。
我能够从文件中读取数据(逐行)并将其放入变量(使用sscanf),但我不知道如何创建和填充“字符串”数组。
我需要创建一个n行和9列字符串/字符的数组。
这段代码给了我一个编译器警告(“warning:通过参数1的'strcpy'使指针从整数没有一个造型”)和程序错误:

char matrix_model_data[3][10];
    strcpy(matrix_model_data[0][0],"some text");
    printf("VALUE = %s\n",matrix_model_data[0][0]);

我该怎么办?
谢谢
编辑
现在我已经使用我的值修改了代码,但是它只打印了最后一条记录1317次(mdata_num = 1317)...为什么?

char ***table = (char ***) calloc(mdata_num, sizeof(char**));

    int i, j, m;
    for(i=0; i<mdata_num; i++)
    {
        fgets(LineIn,500,fIn);
        sscanf(LineIn, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s",stTemp0,stTemp1,stTemp2,stTemp3,stTemp4,stTemp5,stTemp6,stTemp7,stTemp8);
        iterazioni++;
        table[i] = calloc(COLUMNS, sizeof(char*));
        for(j=0; j<COLUMNS; j++)
        {

            table[i][j] = calloc(MAX_STRING_SIZE, sizeof(char));
        }
        table[i][0] = stTemp0;
        table[i][1] = stTemp1;
        table[i][2] = stTemp2;
        table[i][3] = stTemp3;
        table[i][4] = stTemp4;
        table[i][5] = stTemp5;
        table[i][6] = stTemp6;
        table[i][7] = stTemp7;
        table[i][8] = stTemp8;
    }

    for(i=0; i<mdata_num; i++)
    {
        for(j=0; j<COLUMNS; j++)
        {
            printf("%s\t", table[i][j]);
        }
        printf("\n");
    }

    //FREE THE TABLE
    for(i=0; i<mdata_num; i++)
    {
        for(j=0; j<COLUMNS; j++)
        {
            free(table[i][j]);
        }
        free(table[i]);
    }
    free(table);
5us2dqdw

5us2dqdw1#

有静态和动态两种方式,具体用哪一种取决于你是否知道行数。

静态

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define ROWS 10
#define COLUMNS 9
#define MAX_STRING_SIZE 256

int main(){

  char table[ROWS][COLUMNS][MAX_STRING_SIZE];

  //EXAMPLE OF USE
  for(i=0; i<ROWS; i++)
    for(j=0; j<COLUMNS; j++)
      strcpy(table[i][j], "hi");

}

动态

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define ROWS 10
#define COLUMNS 9
#define MAX_STRING_SIZE 256

int main(){

  char ***table = calloc(ROWS, sizeof(char**));

  int i, j;
  for(i=0; i<ROWS; i++){
    table[i] = calloc(COLUMNS, sizeof(char*));
    for(j=0; j<COLUMNS; j++){
      table[i][j] = calloc(MAX_STRING_SIZE, sizeof(char));
    }
  }

  //FREE THE TABLE
  for(i=0; i<ROWS; i++){
    for(j=0; j<COLUMNS; j++){
            fprintf(stderr, "%s, ", table[i][j]);
            free(table[i][j]);
        }
        fprintf(stderr, "\n");
        free(table[i]);
    }
    free(table);

}

当然,你需要检查calloc调用是否返回NULL。用calloc分配字符串可以确保字符串初始化为零。这个算法将创建10行,9列,每列是一个256个字符的字符串。

相关问题