打印填充的字符串数组会打印垃圾

时间:2015-07-01 12:51:19

标签: c arrays string

我刚刚进入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_radpol_rad数组已正确填充并可以使用。但是,当我尝试printf name数组内容时,它只是随意的废话。

有人可以解释为什么我可以成功修改函数中的double数组,而不是字符串数组吗?

1 个答案:

答案 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您为其分配数据的每个指针。