如何使用 strcpy_s() 将多个 char* 字符串复制到一个字符串中?
How can I copy multiple char* strings into one using strcpy_s()?
使用 strcpy_s()
函数我想将前三个字符串整理成最后一个字符串以打印我的全名。这就是我所拥有的,但它不起作用,因为我使用的是 char*
字符串而不是 std::string
s.
#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;
}
有什么建议吗?
您需要同时使用 strcat
和 strcpy
查看代码注释了解更多信息。
// 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_s
和 strcat_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
的输出添加溢出检查,并且(正如其他人所指出的)执行此操作有更好的模式可以遵循,但作为学术练习可能有一些好处在这里学习。
使用 strcpy_s()
函数我想将前三个字符串整理成最后一个字符串以打印我的全名。这就是我所拥有的,但它不起作用,因为我使用的是 char*
字符串而不是 std::string
s.
#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;
}
有什么建议吗?
您需要同时使用 strcat
和 strcpy
查看代码注释了解更多信息。
// 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_s
和 strcat_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
的输出添加溢出检查,并且(正如其他人所指出的)执行此操作有更好的模式可以遵循,但作为学术练习可能有一些好处在这里学习。