我有一个包含数据的文件
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,但这可以解决您的主要问题。