c++ - 将 int 转换为 char* 时出现奇怪的输出

标签 c++ c string pointers

我有一个 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/

相关文章:

python - 删除一行中特定单词的重复

c - 使用 system() 复制文件(带有 "cp")永远不会返回?

c++ - 参数包不在最后位置的部分类模板特化

c++ - 拆分已拆分的 Pane (MFC)

Android.mk 将编译 .c 源而不是 .cpp

将预处理器标记转换为字符串

凯撒密码程序 - 数组输出中的荒谬数字

string - 是否有一种有效的算法来找到具有最差交换距离的给定字符串的排列?

java - 如何将单词的指定最后一个字母匹配并替换为句子中的不同字母

c++ - 哪些规则确定对象是否可轻松复制