带有strlen的malloc double数据类型

时间:2011-12-29 07:18:25

标签: c

如何以正确的方式为strlen(esc)分配内存? tempstr是char数据类型。

double esc = t1.tv_sec+(t1.tv_usec/1000000.0);
strAll = malloc(strlen(temp) + strlen(str) + strlen(esc) + 1);

5 个答案:

答案 0 :(得分:2)

你不能strlen(esc)。我确信编译器已经告诉过你,strlen()的参数必须是char *,你传递的是double。首先尝试使用doublechar转换为snprintf()数组。

答案 1 :(得分:2)

您需要将esc转换为字符串,可能需要sprintf()。然后使用malloc()

中的长度
char buffer[32];
int  n = snprintf(buffer, sizeof(buffer), "%.6f", esc);
if (n >= sizeof(buffer))
    ...handle overlong string problems (bail out)...
char *strAll = malloc(strlen(temp) + strlen(str) + n + 1);
if (strAll == 0)
    ...handle out of memory problem (bail out)...
sprintf(strAll, "%s%s%s", temp, str, buffer);

(我没有检查sprintf()返回的长度,因为'它不会出错'。你计算了组件字符串的长度,因此,它将完全填充分配的空间。如果你决定检查它,然后保留作为malloc()的参数的长度并对其进行测试。)

答案 2 :(得分:2)

您可以使用snprintf找到所需的长度。传递'0'作为大小将阻止写入任何字节,并返回它所需的字节数。

size_t length = snprintf(0, 0, "%lf%s%lf", esc, temp, esc) + 1;
strAll = malloc(length);
snprintf(strAll, length, "%lf%s%lf", esc, temp, esc);

答案 3 :(得分:1)

您的代码无法编译。 strlen需要一个字符串参数,它是一个指向char序列的指针(就像一个数组)。

也许你想要像

这样的东西
char buf[30];
double esc = somedoublefunction();
snprintf (buf, sizeof(buf), "%f", esc);
return strdup(buf);

当然你应该关注以后free生成的指针。

答案 4 :(得分:0)

如果您只想将所有数据保存在一个缓冲区中,请尝试使用以下方法之一:

sizeof(esc)或sizeof(double)

如果要将esc转换为字符串。否则,我建议在转换为字符串时使用固定点格式,例如snprintf(buffer,7,“%03.3f”,esc);