我有一个包含类似数据的文件
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/