【问题标题】:How to concatenate const char* strings in c++ with no function calls?如何在没有函数调用的情况下连接 C++ 中的 const char* 字符串?
【发布时间】:2012-01-18 04:02:02
【问题描述】:

Ps:这更像是一个概念问题。

我知道这无缘无故让事情变得更加复杂,但我想知道的是。如果我没记错的话,c++ 中的 const char* "like this" 指向 l 并且会在编译时自动归零。我相信它正在创建一个临时变量const char* 来保存它,除非它使用字节变量跟踪偏移量(我没有检查反汇编)。我的问题是,如果可能的话,您如何在无需调用函数或实例化字符串的情况下向该字符串添加字符?

示例(这是错误的,只是为了让您可以想象我的意思):

"Like thi" + 's';

我想出的最接近的方法是将其存储到具有足够空间的const char* 并更改其他字符。

例子:

char str[9];
strcpy(str, "Like thi")
str[8] = 's';

说明: 否决票:这个问题没有显示任何研究工作;不清楚或没用

好的,所以这个问题被高度否决了。我的问题缺少哪些方面没有太多推理,所以我会努力提高所有这些品质。

我的问题更多,所以我可以更好地理解当您简单地创建一个字符串 "like this" 而不将该字符串的地址存储在 const char* 中时会发生什么我还想知道是否可以连接/更改该字符串的内容,而不使用 strcat() 之类的函数,并且不使用类字符串中的重载运算符 +。我知道这对于处理 C++ 中的字符串并不是非常有用,但我很好奇除了标准方法之外是否还有其他方法。

string example = "Like thi" + "s"; //I'm aware of the string class and its member functions
const char* example2 = "Like this"; //I'm also aware of C-type Strings (CString as well)

也有可能没有英语作为我的母语让事情变得更糟,我为造成的混乱道歉。

【问题讨论】:

  • 不太清楚你想要达到什么目标,或者为什么......
  • 否决者和关闭者请解释你的理由。这是一个有效的问题,似乎 OP 不明白发生了什么。
  • 只是一个旁注。 const char* 是一个常数,const 关键字就是这样说的。您不会更改常量。

标签: c++ concatenation string-concatenation


【解决方案1】:

您应该使用 C++ 库提供的字符串库,而不是使用普通的 char 字符串:

#include <string>
#include <iostream>
using namespace std;

int main()
{
    string str = "Like thi";
    cout << str << endl;

    str = str + "s";
    cout << str << endl;
    return 0;
}

通常,不可能在 C 或 C++ 中简单地连接纯 char * 字符串,因为它们只是指向字符数组的指针。如果您打算在自己的代码中进行任何字符串操作,几乎没有理由在 C++ 中使用裸字符数组。

即使您需要访问 C 表示(例如,对于外部库),您也可以使用 string::c_str()

【讨论】:

  • 我知道了,谢谢。我的问题不够清楚,它错误地出现,就像我试图简单地连接字符串并且没有这样做。我希望现在,在我编辑之后,我清楚地表明这是一个概念性问题,并且我不是简单地尝试连接两个字符串。
【解决方案2】:

首先,没有任何null 终止,而是零终止。 C 中的所有 char* 字符串都以 '\0' 结尾。

当你在代码中做这样的事情:

char *name="Daniel";

编译器会生成一个包含内容的字符串:

Daniel\0

并在程序执行期间根据变量上下文(成员、静态、...)的特定时间初始化name指针以指向它。

将 ANYTHING 附加到 name 不会像您预期的那样工作,因为 name 指向的内存不可更改,您可能会遇到访问冲突错误或会覆盖其他内容。

拥有

const char* copyOfTheName = name;

不会创建有问题的字符串的副本,它只会让copyOfTheName 指向原始字符串,所以有

copyOfTheName[6]='A';

将完全一样

name[6]='A';

只会给你带来麻烦。

请改用std::strcat。并且请做一些调查basic 字符串操作在 C 中是如何工作的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 2021-02-09
  • 2011-05-18
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多