c - 读取数据并将其输入到二维字符数组,以及 printf。在c中

标签 c arrays segmentation-fault

我有一个包含类似数据的文件

             wavenumber wavelength  PS
        0.000000e+00    inf 1.339797e+10
        2.667793e-04    2.355200e+04    2.264711e+07
        5.335585e-04    1.177600e+04    5.774260e+06
        8.003378e-04    7.850667e+03    4.347408e+06
        1.067117e-03    5.888000e+03    2.071735e+06
        1.333896e-03    4.710400e+03    1.338209e+06
        1.600676e-03    3.925333e+03    1.010330e+06
        1.867455e-03    3.364572e+03    7.951162e+05
        2.134234e-03    2.944000e+03    6.293471e+05
        2.401013e-03    2.616889e+03    5.702861e+05
        2.667793e-03    2.355200e+03    4.124521e+05 
        //this row goes to 513 and stop
<小时/>

因此,我制作了二维字符数组,因为我想将字符的数据保存在文件中。 但是,问题是当我调用数组时,它没有显示我输入的数据。

我犯了什么问题?

而且,如果我想将列的数据保存到每列的数组中,例如波数[513]、波长[513]、功率规范[513],我该怎么办?

我很高兴您对此提出任何评论。

        char data[513][3];

        //char wavenumber[513], wavelength[513], powerspec[513];
        int COL, ROW, MAX_wavenumber, MAX_wavelength, MAX_powerspec;
        int HEIGHT,WIDTH;
        HEIGHT = 513;
        WIDTH = 3;


        //input data to new array
        for(COL = 0; COL < HEIGHT; COL++){
          for (ROW = 2 ; ROW < WIDTH; ROW++){
            fscanf(fp, "%s", &data[COL-1][ROW-1]);
              printf("%s ---\n",&data[COL-1][ROW-1]); //it shows perfectly.
          }
        }

        /********* PROBLEM PART ***********/
        printf( "%s\n!!", &data[512][2]);

最佳答案

这里有很多错误:

    char data[513][3];

这意味着您为 513 次出现(每次 3 个字符)腾出了空间。您似乎真正想要的是 513x3 字符串。 C 没有原生字符串类型。 C 中的字符串只是以 0 结尾的字符数组。

如果您想要 513 组,每组 3 个字符串,您可以使用结构来实现:

typedef struct
{
    char wavenumber [50];
    char wavelenght [50];
    char ps [50];
} wave_data;

然后,要声明其中的 513 个,请执行以下操作:

wave_data data [513];

然后,要访问这些,您可以执行以下操作

        fscanf(fp, "%s", &data[COL-1].wavenumber);

请注意,您的代码中还存在其他问题,例如滥用 scanf,但这解决了您的主要问题。

关于c - 读取数据并将其输入到二维字符数组,以及 printf。在c中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40170943/

相关文章:

c - 如何在 C 中将数组的字符串元素连接成单个字符串?

c - 为什么这个字符串函数的最后一个字符是 "?"

javascript - 从列表到数组

javascript - 按可变列数对数组进行排序

c - 将字符串数组作为参数传递给 C 中的函数

c - 如何在没有段错误的情况下增加 C 中的字符指针?

c - 尝试手动触发竞争条件时 ln 失败

c - 使用内核模块中的 sysctl 接口(interface)

C# 字典内部数组大小

c - 段错误 : 11 when using scanf. 无法读取过去的 UUN?