我有一个包含数据的文件

             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




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

我有什么问题?

而且,如果我想将列的数据保存为像波数[513],波长[513],powerspec [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,但这可以解决您的主要问题。

09-11 17:42