是否可以將字符串添加到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語言的一個對象,但它們其中之一併不完全相同 –