c++中连接两个char*的函数
Function to concat two char* in C++
首先,我是一个c#程序员,所以我的c++工作知识相当有限。我在大学的时候把它拿回去了,但是已经10年没碰过了,所以如果这是相对简单的东西,请原谅我。
我正在尝试制作一个DLL,我可以在c#中使用,实现libwpd库。
我已经设法创建了一个DLL,导出2个函数,我可以通过p/Invoke访问。第一个返回一个常量整数(由visual studio作为示例生成),第二个返回一个字符串。
如果我从函数返回一个常量字符串,它成功地传递给c#,我可以在另一端读取它,所以我知道数据正在被传递回来。
我遇到的问题是libwpd。我不得不修改他们的TextDocumentGenerator.cpp文件,将信息添加到一个char*中,而不是使用他们使用的printf,以便我以后可以访问它。
我已经在头文件的公共部分添加了一个变量定义,以便我可以从调用代码中读取它。
现在,我正试图编写一个函数,允许我将libwpd给出的char*添加到外部char*。
我想到了这个:
char* addString(const char* addThis, char* toThis)
{
char* copier = (char*)malloc(strlen(toThis) + 1 + 1);
strcpy(copier, toThis);
strcpy(copier, "1");
toThis = (char*)malloc(strlen(copier) + 1);
strcpy(toThis, copier);
return copier;
}
但是当我传递信息返回时,我得到一个空字符串。
通过调用totalFile = addString("n", totalFile);
(我意识到它应该只在技术上重复地向字符串添加"1",但它甚至没有这样做)
如果我改变strcpy为strcat的复印机行,它锁定。
我不知道如何用c++创建程序,所以我甚至可以遍历函数来看看发生了什么。
感谢您的帮助。
你知道std::string
的存在吗?它是c++中处理字符串的类;char *
是c的遗产。
std::string
提供+
操作符
您需要为返回字符串分配足够的空间,将初始字符串复制到目标缓冲区,然后调用strcat来附加额外的信息。
例如:char* addString(const char* addThis, const char* toThis)
{
char* destination = (char*)malloc( strlen( addThis ) + strlen( toThis ) + 1 );
strcpy( destination, toThis );
strcat( destination, addThis );
return destination;
}
不要忘记,在调用这个函数之后,您需要在某个时刻调用free( destination )
。
编辑:当然,这只是我在修正你的问题中提出的功能。实际上,从函数返回一个指针并指望调用者释放它并不是一个好主意。由于您使用的是c++而不是C,因此最好使用一些c++结构,例如std::string,或者至少将char*封装在shared_ptr或类似的结构中。
如果你打算写c++,我建议你买一本关于这个主题的好书,如果你不知道自己在做什么,那真是太容易搬起石头砸自己的脚了。
由于您正在替换printf()
调用,因此sprintf()
可能是创建字符串的最简单方法。
首先,Griwes是正确的。你没有权利做你正在做的事情,并把这个问题标记为c++。原因很简单,这不是我们在c++中处理字符串的方式。
作为一个c#程序员,你很清楚String
类。好吧,std::string
是类似的。它省去了处理字符串的繁琐工作,这样你就不必走你正在走的那条痛苦的路线。
在c++中连接两个字符串很简单:
std::string a = "I slept with ";
std::string b = "a heavy heart.";
std::string c = a + b;
瞧。
- 如何在C++中比较两个char数组
- 如何更好地检查两个 char 变量是否在一组值中?
- 在 char* 数组中添加两个索引
- C++函数返回两个 char 数组的相同索引元素
- *char数组到字符串(两次运行代码和两个不同的结果)
- 为什么Xor-ing两个“ char”阵列显示垃圾位
- 如何在C/ C 中比较两个char的两个2D阵列
- 使用"const char*"和"char*"参数连接两个第三方模块
- 在C 中乘以两个char阵列
- 为什么这两个char阵列不相等
- Qthread char阵列在两个线程之间传递后被摧毁
- 在C 中使用两个CHAR变量评估布尔值
- 计数最低号码.char.从两个字符串中删除以使它们成为字眼
- 如何在c++中将计算分解为两个double和一个char
- 有没有直接的方法可以连接两个字符数组 (char*)
- C ++中的两个'char*'铸件有什么区别
- 将两个常量char*组合在一起
- 将两个单词读入一个char数组元素
- 比较c++中的两个char
- c++中连接两个char*的函数