2016-07-28 228 views
-1

是否可以将字符串添加到C++中的字符串指针? 不工作例如:将字符串添加到字符串指针

String* temp; 
temp[0] = "string"; 

就像它是可能的:

String temp[3]; 
temp[0] = "string"; 

建议只使用一个正常的阵列或复制到不同的固定阵列之前,字符串的指针需要退换一个函数。例如。

String* SomeClass::toArray(String str) 

我也打开其他建议如何从此函数返回数组。

+2

什么是字符串? –

+0

我想问同样的问题。但正如你看到的问题有arduino标签。字符串是基于C或C++的Arduino语言的一个对象,但它们其中之一并不完全相同 –

回答

0

的是什么String此代码段

String* temp; 
temp[0] = "string"; 

如果编译导致不确定的行为Independing因为指针临时要么有一个不确定的值(如果它是一个局部变量)或NULL,你可能不消除它。

倘若此代码段

String temp[3]; 
temp[0] = "string"; 

是有效的,你可以例如

String* other_temp = temp; 
other_temp[0] = "string"; 
0

写你不能为指针添加任何东西,指针正好指向一些内存。 您需要先创建一些实例,如第二个示例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++类的临时实例)。