我有一个 int,我想获得一个包含该 int 的 char*。我的代码是:
int getLength(int x) {
int l = 0;
while(x) {
l++;
x /= 10;
}
return l;
}
char* toString(int x) {
int l = getLength(x);
char *str = new char[l];
l--; // the digits will be placed on positions 0 to l-1
while(l >= 0) {
str[l] = x % 10 + '0';
x /= 10;
l--;
}
return str;
}
部分结果:
toString(1009) = 1009Ä
toString(23) = 23L
为什么?我只为 l 个字符分配了空间。 (l = int 的长度)
最佳答案
您需要以 null 终止您的字符串。 C 字符串是一系列字符后跟一个'\0'
,或空字符;这就是各种字符串处理函数知道字符串何时结束的方式。如果没有 null,C 标准字符串处理函数将继续读取字符串末尾之外的任何值。
请记住分配一个额外的字符以便为 null 留出空间,并在末尾存储一个 '\0'
:
char *str = new char[l+1];
str[l] = '\0';
顺便说一下,new
是一个 C++ 运算符。在 C 中,您将使用 malloc()
。在 C++ 中,使用 std::string
可能更好,因为它处理内存分配并且不需要空终止。
关于c++ - 将 int 转换为 char* 时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19297342/