【发布时间】:2012-03-11 16:16:48
【问题描述】:
我正在尝试构建一个接受 1 个参数的函数:数字为 char[] 并返回一个 char**,除数为字符串。
我想出了以下函数,它只适用于某些数字。
char** calc_div(char nr[100])
{
int nri,i,ct=0;
char **a = (char**)malloc(sizeof(char*));
nri = atoi(nr);
for(i=0;i<sizeof(char*);i++)
a[i] = (char*)malloc(sizeof(char));
for(i=1;i<=nri;i++)
if(nri % i == 0)
{
sprintf(a[ct++],"%d",i);
}
return a;
}
这适用于 22、33、77 等数字,但不适用于 66 或 88(它只是卡在某个地方)。谁能帮帮我?
【问题讨论】:
-
内存分配对我来说毫无意义。我很惊讶它完全有效..
-
1) 不要转换
malloc的结果,2) 因为sizeof(char) == 1,你不必明确地拼出来。 -
您可以通过使用调试器或通过添加 printf 语句来跟踪进度来找出卡住的位置。
-
包含 1 个元素的空格的字符串(您的
malloc(sizeof(char)))只能是空字符串:元素 必须 是 NUL 终止符;或者它不再是一个字符串......如果它不是一个字符串,你就不能在接受字符串的函数中可靠地使用它(比如sprintf())。 -
@pmg 我将 sizeof(char) 替换为虚拟的
100值。但除此之外,该功能似乎做对了吗?我对 C 数据类型(指针等)不是很熟悉,所以这就是我要问的原因。