c++中连接两个char*的函数

Function to concat two char* in C++

本文关键字:char 两个 函数 连接 c++      更新时间:2023-10-16

首先,我是一个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;

瞧。