2

如何将两个 const char*s 组合成第三个?

我正在尝试使用以下代码执行此操作:

const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
const char* nName;
int num_chars = asprintf(&nName, "%s%s", "Somebody known as ", pName);

但我得到这个错误:

'asprintf': identifier not found

我通过以下代码包含 stdio.h:

#include <stdio.h>
4

4 回答 4

9

简单,只需使用 C++:

const char* pName = "Foo"
std::string name("Somebody known as ");
name += pName;

const char* nName = name.c_str();
于 2012-07-18T21:51:51.197 回答
7

asprintf是一个 GNU 扩展。您可以改为使用snprintf, 或 strncat,但您需要自己处理内存管理:asprintf为您分配结果。

更好用std:string,这将使代码更容易。

于 2012-07-18T21:52:48.753 回答
2

sprintf(snprintf) 或 strcat(strncat)。冲刺。

sprintf(nName, "%s%s", "Somebody known as ", pName);

strcat.

strcpy(nName, "Somebody known as ");
strcat(nName, pName);
于 2012-07-18T21:52:21.963 回答
1

我将假设您使用的是 C,此外您已将此问题标记为 C++。如果您想要 C++,请参阅 Luchian 的答案。

代码中几乎没有错误 - 更大的错误是您没有为指向 by 的字符串分配内存pName。第二个错误是您正在获取nName变量的地址,而不是asprintf函数中保留内存位置的地址。第三个错误是该asprintf函数不是标准的 C 函数,但是 GNU 扩展并且它可能在您的编译器上不可用(您没有说哪个是): http: //linux.die.net/man/3/asprintf

你应该使用这样的东西:

#include <stdio.h>
const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
char nName[30];
int num_chars = sprintf(nName, "%s%s", "Somebody known as ", pName);

编辑:我现在已经阅读了有关 asprintf 函数的更多信息。你应该传递你的指针的地址asprintf,但它不应该是const char *char*因为它指向的内存位置会在分配足够的内存后改变asprintf

于 2012-07-18T22:00:04.253 回答