如何以正确的方式为strlen(esc)
分配内存? temp
和str
是char数据类型。
double esc = t1.tv_sec+(t1.tv_usec/1000000.0);
strAll = malloc(strlen(temp) + strlen(str) + strlen(esc) + 1);
答案 0 :(得分:2)
你不能strlen(esc)
。我确信编译器已经告诉过你,strlen()
的参数必须是char *
,你传递的是double
。首先尝试使用double
将char
转换为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);