如何使用 strcpy_s() 将多个 char* 字符串复制到一个字符串中?

How can I copy multiple char* strings into one using strcpy_s()?

使用 strcpy_s() 函数我想将前三个字符串整理成最后一个字符串以打印我的全名。这就是我所拥有的,但它不起作用,因为我使用的是 char* 字符串而不是 std::strings.

#include <iostream>
using namespace std;

int main()
{
    char str_first[] = "Nerf_";
    char str_middle[] = " Herder";
    char str_last[] = "42";

    char str_fullName[35];

    strcpy_s(str_fullName, (str_first + str_middle + str_last).c_str());
    cout << str_fullName;
}

有什么建议吗?

您需要同时使用 strcatstrcpy

查看代码注释了解更多信息。

// disable SDL warnings in Visual studio
#define _CRT_SECURE_NO_WARNINGS

#include <cstring>
#include <iostream>
using namespace std;

int main()
{
    // TODO: insert checking code,
    // to make sure destination can hold all characters + one termination.

    char str_first[] = "Nerf_";
    char str_middle[] = " Herder";
    char str_last[] = "42";

    char str_fullName[35];

    // copy first string because we need null terminated destination
    strcpy(str_fullName, str_first);

    // append the rest, string is auto null terminated.
    strcat(str_fullName, str_middle);
    strcat(str_fullName, str_last);

    cout << str_fullName;
}

如果我没记错的话,函数 strcpy_s 需要三个参数。因此,要么为函数调用再提供一个参数,要么改用函数 strcpy.

并且不需要使用标准classstd::string来执行任务。

代码可以如下所示

strcpy( str_fullName, str_first );
strcat( str_fullName, str_middle );
strcat( str_fullName, str_last );

或者您可以使用 strcpy_sstrcat_s,前提是您要指定正确数量的参数。

注意需要包含header

#include <cstring>

这应该接近您要查找的内容,严格使用 strcpy_s 将字符串连接在一起:

#include <string.h>
#include <iostream>
using namespace std;

int main()
{
    char str_first[] = "Nerf_";
    char str_middle[] = " Herder";
    char str_last[] = "42";

    char str_fullName[35];

    int index = strcpy_s(str_fullName, sizeof str_fullName, str_first);
    index += strcpy_s(str_fullName + index, sizeof str_fullName - index, str_middle);
    index += strcpy_s(str_fullName + index, sizeof str_fullName - index, str_last);
    cout << str_fullName;
}

index 变量有两个用途:(1) 在构建字符串时为输出 str_fullName 字符串提供新索引,以及 (2) 从 [=14 中减去=],它 "adjusts" 构建字符串时的可用缓冲区大小。

注意事项是您应该通过 strcpy_s 的输出添加溢出检查,并且(正如其他人所指出的)执行此操作有更好的模式可以遵循,但作为学术练习可能有一些好处在这里学习。