连接两个char*会产生奇怪的结果
Concatenating 2 char* produces weird result
我是c++的新手。
所以我正在处理这样一种情况,我有两个char*
需要连接并传递给另一个方法。这应该很简单,但我就是想不明白……
第一个字符和引用
的getMetaData()
方法声明virtual const char *getMetaData() const = 0
char* metaChar = const_cast<char*>(result->getMetaData());
第二个字符和getUniqueTargetId()
方法声明引用
virtual const char *getUniqueTargetId() const = 0
char* idChar = const_cast<char*>(result->getUniqueTargetId());
现在我需要将它们组合到方法setUserData()
中。下面是它的声明:
virtual bool setUserData(void *userData) = 0
现在,如果我将每个char
单独传递到setUserData()
方法中,它工作得很好。如果我尝试将它们连接起来,然后传递结果,它要么产生nil
,要么产生一些看起来像拉丁语的随机字符。
我尝试了以下方法(加上其他一些方法和变化):
- 将每个转换为NSString,连接它们,转换回
char
- 试图连接两个
char
数组 - 转换到各种不同的东西并来回转换
- 关闭并重新打开
- 检查
metaChar
的类型和上面选项1的结果,它们对应-显然完全相同
再次-我是新来的这些部分…可能我遗漏了一些明显的东西,但是现在已经好几个小时了,这似乎是一个不应该占用这么多时间的问题。
这里有很多讨厌的const_cast
和到void*
的转换,但我假设你已经给出了这些方法,所以不能做太多。
假设setUserData
接受内部传递的字符串的副本,那么对于char*
的两个"字符串"foo
和bar
,您可以使用
setUserData(const_cast<void*>(reinterpret_cast<const void*>((std::string(foo) + std::string(bar)).c_str())));
这里我依靠std::string
对+
的重载来执行连接。c_str()
返回一个const char*
,并且在语句的生命周期内有效。我希望 setUserData
采用"字符串"的深度拷贝:检查函数文档。如果我说的不对,那么这种方法是行不通的。请注意,我们是通过一个const_cast
来强制转换到void*
,我不是特别喜欢,但是明确说明这种事情是很好的。
如果你"拥有"所有的功能,那么抛弃所有这些char*
的废话,从一开始就使用std::string
。
所以我最终找到了我的解决方案-谢谢大家的帮助!
我基本上绕了很长一段路,是的,这看起来相当多余,但对于一个完整的初学者(就像一个星期的经验-我在这里是被迫的)它是有效的…
char* metaChar = const_cast<char*>(result->getMetaData());
char* idChar = const_cast<char*>(result->getUniqueTargetId());
char *buffer = new char[(int)strlen(metaChar)+(int)strlen(idChar)+5]();
strncat(buffer, idChar, strlen(idChar));
strncat(buffer, metaChar, strlen(metaChar));
strncat(buffer, " ", 2);
newTrackable->setUserData(buffer);
+5
只是为了提供一个缓冲区(ha…看到我在那里做了什么?)的char
或任何可能需要更多空间的东西。
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 为什么这两段使用 constexpr、__PRETTY_FUNCTION__ 和 char * 的代码有不同的结果?
- *char数组到字符串(两次运行代码和两个不同的结果)
- 为什么在使用SizeOf进行同一char阵列时会得到各种结果
- QString 到 const char* 的不同结果
- 正在使用new char[]或malloc的结果来铸造float*是UB(严格的混叠冲突)
- 通过指针传递char并获得不同的结果
- 为什么不允许我将函数返回 const char* 的结果分配给 char*,bt 可以将字符串文字(常量)分配给 cha
- JNA.char*它不包含结果
- 将构造函数与 const char * 作为参数链接会产生意外的结果
- 使用 'const_cast<char*>()' 将 'std::string::c_str()' 的结果传递给 'mkdtemp()'
- "Truncation from int to char"不产生任何结果
- char*与std字符串的比较结果错误
- 从类型char到int的转换会产生不同的结果
- 连接两个char*会产生奇怪的结果
- Python使用ctypes传递char *数组并填充结果
- 为什么在c++中,当等价相同的文本值时,char和string数据类型显示不同的结果?
- C++:int*/float*到char*,为什么使用repret_cast会得到不同的结果
- 在 std::d eque 上简单的插入-擦除-插入<char>会产生奇怪的结果
- RPC服务器返回结果char将得到段错误