C ++ - 如何将char附加到char *?

时间:2013-11-10 16:15:25

标签: c++ char append

我已经尝试过如此可能在互联网上将字符附加到字符*但它们似乎都不起作用。这是我不完整的解决方案之一:

char* appendCharToCharArray(char * array, char a)
{
    char* ret = "";
    if (array!="") 
    {
        char * ret = new char[strlen(array) + 1 + 1]; // + 1 char + 1 for null;
        strcpy(ret,array);
    }
    else
    {
        ret = new char[2];
        strcpy(ret,array);
    }

    ret[strlen(array)] = a;  // (1)
    ret[strlen(array)+1] = '\0';
    return ret;
}

仅当传递的数组为“”(内部空白)时才有效。否则它没有帮助(并在(1)处得到错误)。你能帮帮我吗?非常感谢先进!

4 个答案:

答案 0 :(得分:13)

删除char * ret块中隐藏外部if的{​​{1}}声明。因此,您有内存泄漏,另一方面,ret未分配内存。

要比较c风格的字符串,您应使用ret而不是strcmp(array,"")。您的最终代码应如下所示:

array!=""

请注意,您必须按char* appendCharToCharArray(char* array, char a) { size_t len = strlen(array); char* ret = new char[len+2]; strcpy(ret, array); ret[len] = a; ret[len+1] = '\0'; return ret; } 处理已返回ret的已分配内存。

为什么不使用std::string?它有delete[]方法在字符串的末尾附加一个字符:

.append

答案 1 :(得分:2)

函数名称不反映函数的语义。实际上你不附加一个角色。您创建一个包含原始数组和给定字符的新字符数组。因此,如果您确实需要一个将字符附加到字符数组的函数,我将按以下方式编写它

bool AppendCharToCharArray( char *array, size_t n, char c )
{
    size_t sz = std::strlen( array );

    if ( sz + 1 < n ) 
    {
        array[sz] = c;
        array[sz + 1] = '\0';
    }       

    return ( sz + 1 < n );
} 

如果你需要一个包含原始数组副本和给定字符的函数,那么它可能看起来如下

char * CharArrayPlusChar( const char *array, char c )
{
    size_t sz = std::strlen( array );
    char *s = new char[sz + 2];

    std::strcpy( s, array );
    s[sz] = c;
    s[sz + 1] = '\0';

    return ( s );
} 

答案 2 :(得分:1)

具体问题是您要声明一个新变量而不是分配给现有变量:

char * ret = new char[strlen(array) + 1 + 1];
^^^^^^ Remove this

并尝试通过比较指针来比较字符串值:

if (array!="")     // Wrong - compares pointer with address of string literal
if (array[0] == 0) // Better - checks for empty string

虽然根本没有必要进行比较;无论字符串是否为空,第一个分支都会做正确的事。

更普遍的问题是你在C ++中乱搞易犯错误的C风格字符串操作。使用std::string,它将为您管理所有内存分配:

std::string appendCharToString(std::string const & s, char a) {
    return s + a;
}

答案 3 :(得分:0)

char ch = 't';
char chArray[2];
sprintf(chArray, "%c", ch);
char chOutput[10]="tes";
strcat(chOutput, chArray);
cout<<chOutput;

<强>输出:

test