添加2个字符而不使用strncpy?

时间:2010-04-26 18:53:38

标签: c++ c

如何在不使用strncpy函数的情况下手动连接两个char数组?

我可以说char1 + char2吗?

或者我是否必须编写一个for循环来获取单个元素并将其添加为:

addchar[0] = char1[0];
addchar[1] = char1[1];
etc
etc
addchar[n] = char2[0];
addchar[n+1] = char2[1];
etc
etc

澄清,如果 char1 =“快乐” char2 =“生日”

我想要addchar to = happybirthday

5 个答案:

答案 0 :(得分:4)

对于仅限C的解决方案,请使用strncat

char destination[80] = "";
char string1[] = "Hello";
char string2[] = " World!";


/* Copy string1 to destination */
strncat(destination, string1, sizeof(destination));

/* Append string2 to destination */
strncat(destination, string2, sizeof(destination) - sizeof(string1));

请注意,字符串函数的strn *系列比没有n的字符串函数更安全,因为它们可以避免缓冲区溢出的可能性。

对于C ++解决方案,只需使用std :: string和operator +或operator + =:

std::string destination("Hello ");
destination += "World";
destination += '!';

答案 1 :(得分:3)

如果您正在使用c ++,请使用std::string。使用std::string s,支持+运算符,因此您可以执行string1 + string2。

答案 2 :(得分:2)

如果你认为两个琐碎的循环是“手动的”,那么是的,不使用标准库这是唯一的方法。

char *append(const char *a, const char *b) {
    int i = 0;
    size_t na = strlen(a);
    size_t nb = strlen(b);
    char *r = (char*)calloc(na + nb + 1, 1);
    for (i = 0; i < na; i++) {
        r[i] = a[i];
    }
    for (i = 0; i < nb; i++) {
        r[na + i] = b[i];
    }
    return r;
}

请记得致电free

答案 3 :(得分:1)

不使用库函数,这里是程序:
1.指向string1中的第一个字符 2.当指针的当前字符不为空时,增加指针 3.创建一个指向string2的“源”指针 4.“源”位置的字符不为空:
4.1。将字符从“源”位置复制到String1指针指向的位置 4.2。增加两个指针。

除非这是作业,否则请使用C ++ std::string作为您的文字 如果必须使用C样式字符串,请使用库函数 库函数经过优化和验证,缩短了开发时间。

答案 4 :(得分:1)

好吧,你想要这样的东西:

char1 + char2

首先,让我们看看疯狂的解决方案:

C:

char* StringAdd(char* a_Left, char* a_Right)
{
    unsigned int length_left = strlen(a_Left);
    unsigned int length_right = strlen(a_Right);
    unsigned int length = length_left + length_right;

    char* result = (char*)malloc(length);

    // clear the string
    memset(result, 0, length);

    // copy the left part to the final string
    memcpy(result, a_Left, length_left);

    // append the right part the to the final string
    memcpy(&result[length_left], a_Right, length_right);

    // make sure the string actually ends
    result[length] = 0;

    return result;
}

C ++:

char* StringAdd(char* a_Left, char* a_Right)
{
    unsigned int length_left = strlen(a_Left);
    unsigned int length_right = strlen(a_Right);
    unsigned int length = length_left + length_right;

    char* result = new char[length];

    // clear the string
    memset(result, 0, length);

    // copy the left part to the final string
    memcpy(result, a_Left, length_left);

    // append the right part the to the final string
    memcpy(&result[length_left], a_Right, length_right);

    // make sure the string actually ends
    result[length] = 0;

    return result;
}

现在,让我们看看理智的解决方案:

char* StringAdd(char* a_Left, char* a_Right)
{
    unsigned int length = strlen(a_Left) + strlen(a_Right);

    char* result = new char[length];
    strcpy(result, a_Left);
    strcat(result, a_Right);

    return result;
}

那么,这是家庭作业吗?我真的不在乎。

如果是的话,问问自己:你学到了什么?