我刚开始学习C,对RPG编码有一定的了解。和我之前的许多人一样,我对字符串、数组和指针以及如何使用它们感到困惑。
我正在开发一个程序,该程序从数据文件中获取行星的名称、赤道半径和极地半径,然后计算并输出体积和表面积。
我的主要函数有以下声明:
double equi_rad[iNumPlanets]; /* equitoral radii of planets */
double pol_rad[iNumPlanets]; /* polar radii of planets */
char *name[iNumPlanets]; /* array containing planet name */
(iNumPlanets
已初始化为8(
然后我调用函数load
:
load("radii.dat", equi_rad, pol_rad, iNumPlanets, name);
Load在循环中读取文件并填充数组。我已经验证了这在函数中是正确的,所以复制这段代码似乎没有意义。这就是原型:
int load(const char* filename, double *equitoral_radii, double *polar_radii, const int iNumPlanets, char *planet_name[]);
回到我的主函数中,equi_rad
和pol_rad
数组已正确填充,并且可以使用。然而,当我尝试printf
name
数组内容时,这只是随机的废话。
有人能解释为什么我可以成功地修改函数中的double
数组,而不能修改字符串数组吗?
回到我的主函数中,equi_rad和pol_rad数组是正确填充并且可以使用。然而,当我尝试打印名称数组的内容,这只是随机的废话。
您需要显示代码。猜测是您没有正确填充planet_name
数组。您可能需要使用malloc
(例如planet_name[i] = malloc(LENGTH)
(,并将字符串内容复制到那里。那你就应该没有问题了。例如
planet_name[i] = malloc(strlen(sourceStr)+1);
strcpy(planet_name[i], sourceStr);
不要忘记为其分配数据的每个指针free
。