我刚刚进入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);
在循环中加载读取文件并填充数组。我已经验证了这在函数中是否正常工作,所以似乎没有必要复制这段代码。这是原型:
int load(const char* filename, double *equitoral_radii, double *polar_radii, const int iNumPlanets, char *planet_name[]);
回到我的main函数中,equi_rad
和pol_rad
数组已正确填充并可以使用。但是,当我尝试printf
name
数组内容时,它只是随意的废话。
有人可以解释为什么我可以成功修改函数中的double
数组,而不是字符串数组吗?
答案 0 :(得分:1)
回到我的main函数中,equi_rad和pol_rad数组是 填充正确,可以使用。但是,当我尝试 printf名称数组内容,它只是随意的废话。
您需要显示代码。猜猜你没有正确填充planet_name
数组。您可能需要使用malloc
(例如planet_name[i] = malloc(LENGTH)
),并在那里复制字符串内容。那你应该没有问题。 e.g。
planet_name[i] = malloc(strlen(sourceStr)+1);
strcpy(planet_name[i], sourceStr);
不要忘记free
您为其分配数据的每个指针。