【发布时间】:2020-04-16 17:31:20
【问题描述】:
我正在尝试使用以下代码将 int 转换为 C 字符串:
static char* copyString(const char* str)
{
char* new_String = malloc(strlen(str) + 1);
return strcpy(new_String, str);
}
static char* mallocIntToString(const int num)
{
char s[10]; // *************
sprintf(s, "%d", num);
char* copy = copyString(s);
return copy;
}
我在徘徊我应该在行中插入的最大数字是多少
char s[10];.
我使用 10 是因为它是整数的最大位数。但是,当我使用char s[9];,尝试将数字 2147483647 转换为字符串时,此代码也适用于我,这怎么可能?
【问题讨论】:
-
看看
<limits.h>。例如,INT_MIN和INT_MAX可以分别定义为-2147483648和+2147483647。 -
两者都是错误的,代码恰好可以工作。一个 10 位数字需要 11 个字符,因为必须有空间用于终止
'\0'。即使这样,您也会遇到 -2147483648 的麻烦,您需要一个额外的字符来作为符号。 -
未定义行为未定义。任何事情都可能发生,包括今天“工作”和下周休息。
-
仅供参考:已经有
strdup完全按照您的copyString函数正在执行的操作(并进行了适当的错误检查)。 -
为什么还要复制结果字符串呢?只需在堆上分配一个适当大小的缓冲区并使用
sprintf()将结果写入其中。