是否可以将字符串添加到C++中的字符串指针? 不工作例如:将字符串添加到字符串指针
String* temp;
temp[0] = "string";
就像它是可能的:
String temp[3];
temp[0] = "string";
建议只使用一个正常的阵列或复制到不同的固定阵列之前,字符串的指针需要退换一个函数。例如。
String* SomeClass::toArray(String str)
我也打开其他建议如何从此函数返回数组。
是否可以将字符串添加到C++中的字符串指针? 不工作例如:将字符串添加到字符串指针
String* temp;
temp[0] = "string";
就像它是可能的:
String temp[3];
temp[0] = "string";
建议只使用一个正常的阵列或复制到不同的固定阵列之前,字符串的指针需要退换一个函数。例如。
String* SomeClass::toArray(String str)
我也打开其他建议如何从此函数返回数组。
的是什么String
此代码段
String* temp;
temp[0] = "string";
如果编译导致不确定的行为Independing因为指针临时要么有一个不确定的值(如果它是一个局部变量)或NULL,你可能不消除它。
倘若此代码段
String temp[3];
temp[0] = "string";
是有效的,你可以例如
String* other_temp = temp;
other_temp[0] = "string";
写你不能为指针添加任何东西,指针正好指向一些内存。 您需要先创建一些实例,如第二个示例String temp[3];
中所示,您正在创建String
的三个实例。
所以String temp;
将创建本地实例的String
,然后得到它的指针,你可以使用String * tempPtr = &temp;
,但我不明白你为什么会想的是,你可以使用temp
原样......像temp.clear();
或任何功能类String
有(见它的API)。
编辑关于返回字符串指针。
这是一种不幸的C++ API设计。那么谁将拥有该实例的记忆?
例如:
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
}
顺便说一句,从“指定者”的名字,它看起来像你想String实例,而不是字符串的指针数组。所以这些函数应该被定义为String[] SomeClass::toArray(String str)
,仍然存在与内存所有权相同的问题。我想要做的就是不返回数组。 也许void SomeClass::toArray(const String & str, std::vector<String> & array)
,填入数据到array
载体。
我不知道你在arduino上使用C++多少,如果std :: vector是好的,或者没有,但有一个String类感觉像矢量<>也可以,特别是如果你是在浪费你的堆栈通过传递String的复制实例而不是引用。(除String
是一些用于char[]
的宏/ typedef,请不要告诉我......我的意思是,即使C++可以用低内存占用的方式编写,也不必在任何地方硬盘阵列,如果避免不必要分配C++类的临时实例)。
什么是字符串? –
我想问同样的问题。但正如你看到的问题有arduino标签。字符串是基于C或C++的Arduino语言的一个对象,但它们其中之一并不完全相同 –