将字符串添加到字符串指针

时间:2016-07-28 13:34:28

标签: c++ arrays string arduino

是否可以在C ++中向字符串指针添加字符串? 不工作的例子:

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

就像它可能在:

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

在建议只使用普通数组或将其复制到不同的固定数组之前,需要在函数中返回字符串指针。例如

String* SomeClass::toArray(String str)

我也欢迎其他建议如何从此函数返回一个数组。

2 个答案:

答案 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 ++类的临时实例,那么必须在任何地方硬连接数组。)