【问题标题】:How to append const char* to a const char*如何将 const char* 附加到 const char*
【发布时间】:2016-12-17 18:22:20
【问题描述】:

我正在尝试将三个不同的 const char* 变量附加到一个中。这是因为 Windows 库中的函数采用参数 LPCTSTR。 我有以下代码:

const char* path = "C:\\Users\\xxx\\Desktop\\";
const char* archivo = "vectors";
const char* extension = ".txt";

const char* fullPath =+ path;
fullPath =+ archivo;
fullPath =+ extension;

当我运行它时,我只会将最后一个(扩展名)添加到 FullPath。

【问题讨论】:

  • 指针不能附加到指针上。
  • C 风格的字符串不支持串联,你知道const 是什么意思吗? =+ 应该做什么?底线,使用 std::string。
  • LPCTSTR 不是 const char* 的同义词,顺便说一下。这是一个指向常量TCHAR 数组的长指针。 TCHAR 是暂时的,可以表示charwchar_t,具体取决于您的软件设置方式。如果您正在使用带有 LPCTSTR 的 Win32 函数,我建议您不要这样做... Win32 API 具有所有字符串函数和任何使用 char * 的代码的 AW 变体应该使用A 变体。
  • 我认为如果你只使用 const wchar_t* 和 wcscat 都会很酷

标签: c++


【解决方案1】:

您需要分配一些空间来保存连接的字符串。幸运的是,C++ 有 std::string 类可以为您执行此操作。

std::string fullPath = path;
fullPath += archivo;
fullPath += extension;
const char *foo = fullPath.c_str();

请注意,包含连接字符串的空间归 fullPath 所有,并且指针 foo 仅在 fullPath 在范围内且在调用 c_str 后未修改时才保持有效。

【讨论】:

  • 由于 OP 不知道字符串(我想),因此添加返回的指针仅在 fullPath 在范围内时才有效可能很有价值。
【解决方案2】:

如果你想在编译时构造一堆字符串文字,其中一些是其他字符串文字的串联,最基本的惯用低维护技术是基于旧的预处理器

#define PATH "C:\\Users\\xxx\\Desktop\\"
#define NAME "vectors"
#define EXT  ".txt"

const char *path = PATH;
const char *archivo = NAME;
const char *extension = EXT;

const char *fullPath = PATH NAME EXT;

然而,同样的事情可以通过使用一些constexpr 和模板元编程魔法以更现代的方式实现(参见C++ concat two `const char` string literals)。

否则,您将不得不求助于运行时连接(如std::string 等)。但同样,如果输入在编译时是已知的,那么运行时解决方案就是“失败者的出路”:)

【讨论】:

    【解决方案3】:

    当您使用 const char* 时,您无法更改指向的字符。 所以将const char* 附加到const char* 是不可能的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多