是否可以在C ++中向字符串指针添加字符串? 不工作的例子:
String* temp;
temp[0] = "string";
就像它可能在:
String temp[3];
temp[0] = "string";
在建议只使用普通数组或将其复制到不同的固定数组之前,需要在函数中返回字符串指针。例如
String* SomeClass::toArray(String str)
我也欢迎其他建议如何从此函数返回一个数组。
答案 0 :(得分:0)
取消String
此代码段的内容
String* temp;
temp[0] = "string";
如果它被编译导致未定义的行为,因为指针temp有一个不确定的值(如果它是一个局部变量)或NULL,你可能不会解除它。
提供此代码段
String temp[3];
temp[0] = "string";
有效,你可以写例如
String* other_temp = temp;
other_temp[0] = "string";
答案 1 :(得分:0)
你不能向POINTER添加任何内容,指针只是指向一些内存。
您需要先拥有一些实例,例如在第二个示例String temp[3];
中创建三个String
实例。
因此String temp;
会创建String
的本地实例,然后获取它可以使用String * tempPtr = &temp;
的指针,但我不明白为什么你想要因为您可以temp
使用temp.clear();
,例如String
或类String* SomeClass::toArray(String str) {
String result;
// BUG, DO NOT DO THIS!
return &result; // returns pointer to local stack variable
// which gets released *here*, invalidating the pointer
}
String* SomeClass::toArray(String str) {
String *result = new String;
return result; // returns pointer to global heap
// now if the upper layer of code will not call "delete" on it
// you have memory leak
}
具有的任何功能(请参阅它的API)。
编辑返回String指针。
那种不幸的C ++ API设计。那么谁将拥有该实例的记忆?
例如:
String[] SomeClass::toArray(String str)
顺便说一下,从#34;到#Array&#34;命名它看起来像你想要的String实例数组,而不是String指针。因此,函数应该定义为void SomeClass::toArray(const String & str, std::vector<String> & array)
,仍然存在与内存所有权相同的问题。
我要做的不是返回一个数组。
也许array
,将数据填入String
向量。
我不知道你在arduino上使用C ++有多少,如果std :: vector是好的,或者没有,但是有一个String的类感觉就像vector&lt;&gt;也可以,特别是如果你通过传递String的副本实例而不是引用来浪费你的堆栈。 (除非char[]
是(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.mymodule = global.mymodule || {})));
}(this, function (exports) { 'use strict';
function myFunction() {
console.log('hello world');
}
}));
的某些宏/ typedef,请不要告诉我......我的意思是,即使C ++也可以用低占用内存的方式编写,你也不会这样做。 ;如果你避免不必要地分配C ++类的临时实例,那么必须在任何地方硬连接数组。)