如何复制或连接两个字符*
How to copy or concatenate two char*
如何将字符*连接或复制在一起?
char* totalLine;
const char* line1 = "hello";
const char* line2 = "world";
strcpy(totalLine,line1);
strcat(totalLine,line2);
此代码产生错误!
segmentation fault
我猜我需要为总行分配内存?
另一个问题是,以下是复制内存还是复制数据?
char* totalLine;
const char* line1 = "hello";
totalLine = line1;
提前感谢! :)
我猜我需要为总行分配内存?
是的,你猜对了。 totalLine
是一个未初始化的指针,因此这些strcpy
调用试图写入内存中的随机位置。
幸运的是,由于您已经标记了此C++,因此您无需为所有这些而烦恼。 只需这样做:
#include <string>
std::string line1 = "hello";
std::string line2 = "world";
std::string totalLine = line1 + line2;
无需内存管理。
以下操作是复制内存还是复制数据?
我想你的意思是"底层字符串是复制的,还是只是指针? 如果是这样,那么只是指针。
是的,您需要为totalLine
分配内存。 在C中,你有各种各样的选择,不同程度的尴尬。 我的首选方式需要 GNU 库扩展asprintf
(在 BSD 上也可用,但不包含在 POSIX 中):
char *xconcat2(const char *line1, const char *line2) {
char *totalLine;
int len = asprintf(&totalLine, "%s%s", line1, line2);
if (len < 0) abort();
return totalLine;
}
我更喜欢这样做,因为它紧凑、易于阅读且易于修改。 但是,如果您需要坚持严格的ISO C,在我看来,下一个最好的办法是写出一系列strlen
和memcpy
操作。 我根本不喜欢使用strcpy
、strncpy
、strcat
或strncat
,因为很容易意外地与strcat
和strncat
二次,因为很难确定你没有缓冲区溢出错误,而且因为strncpy
和strncat
没有做你可能期望它们做的事情。
char *xconcat2_iso(const char *line1, const char *line2) {
size_t len1 = strlen(line1);
size_t len2 = strlen(line2);
char *totalLine = malloc(len1 + len2 + 1);
if (!totalLine) abort();
memcpy(totalLine, line1, len1);
memcpy(totalLine + len1, line2, len2);
totalLine[len1 + len2] = ' ';
return totalLine;
}
<小时 />在C++中,按照接受答案中的建议,只需使用 std::string
.
totalLine
有一个垃圾值
const char* Line1{ "Hallo" };
const char* Line2{ "World" };
char* TotalLine{ new char[strlen(Line1) + strlen(Line2) + 1] };
TotalLine = strcpy(TotalLine, Line1);
TotalLine = strcat(TotalLine, Line2);
注意=> 如果你在Visual Studio上工作,你需要
#define _CRT_SECURE_NO_WARNINGS
将"aaa"和"bbb"集中到"aaabbb":
#include <iostream>
#include <cstring>
using namespace std;
int main() {
const char* Line1 ="aaa";
const char* Line2 ="bbb";
char* TotalLine{ new char[strlen(Line1) + strlen(Line2) + 1] };
TotalLine = strcpy(TotalLine, Line1);
TotalLine = strcat(TotalLine, Line2);
cout << TotalLine <<endl;
}
相关文章:
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 在函数中连接两个字符,并在 C++ 中返回输出
- 舍入 QDecDouble 值,精度最多为两个字符
- 计算两个字符序列
- 在c++中连接两个字符
- 有没有办法我可以从 istringstream 中读取两个字符
- 如何查看两个字符变量是否相等
- 使用位于 C 字符串中的两个字符*获取子字符串
- 比较两个字符的问题
- 如何修复密码条目,它一次输入两个字符
- 字符串构造函数将两个字符* 放入另一个 std::string 在 C++14 中有效,但不适用于 C++17
- 将两个字符数组相互添加
- 在 c++ 中添加两个字符
- 如何删除QString的前两个字符
- 如何使用两个字符来控制 C++ 程序的流程
- 如何将两个字符或字符串数组附加到一个数组中
- 如何从两个字符之间的文件中提取整数
- 删除两个字符之间的文本
- std::setw() 将特殊字符视为两个字符
- 比较两个字符*是否相等