在C#中,您将有一个字符串,要追加到该字符串,我将执行以下操作:

//C#
string str="";
str += "Hello";
str += " world!"
//So str is now 'Hello world!'


但是在AVR的C ++中,我使用const char *。我该如何附加呢?

const char * str="";
str += "Hello world!"; //This doesn't work, I get some weird data.
str = str + "Hello world!"; //This doesn't work either


注意:我正在Atmel Studio 6中对avr进行编程,因此我认为大多数人无法使用C ++中使用的功能,因为一旦尝试一些在线示例,就会出现构建失败的情况。我也没有String数据类型。

最佳答案

您确实应该深入研究C教程或书籍,并阅读有关字符串的章节。

const char * str="";在(恒定)数据段中创建一个指向空字符串的指针。

str += "Hello world!"


字符串处理在C中不能像这样工作
指针指向的内存是常量,您应该不能对其进行修改
向指针添加内容将更改指针指向的位置(而不是数据)


由于您使用的是AVR,因此应避免使用动态内存。
定义一个空的字符串常量是没有意义的。

小例子:

#define MAX_LEN 100
char someBuf[MAX_LEN] = ""; // create buffer of length 100 preinitilized with empty string

const char c_helloWorld[] = "Hello world!"; // defining string constant

strcat(someBuf, c_helloWorld); // this adds content of c_helloWorld at the end of somebuf
strcat(someBuf, c_helloWorld); // this adds content of c_helloWorld at the end of somebuf

// someBuf now contains "Hello world!Hello world!"



其他游览/解释:
由于AVR具有哈佛架构,因此它(至少在没有环境的情况下)无法读取程序存储器。因此,如果您使用字符串文字(例如“ Hello world!”),则默认情况下它们需要加倍的空间。它们的一个实例在闪存中,在启动代码中,它们将被复制到SRAM。取决于您的AVR,这可能很重要!您可以解决此问题,仅通过使用PROGMEM属性(或类似名称)声明Pointer将它们存储在程序存储器中,但是现在您需要自己在运行时从闪存中显式读取它们。

关于c# - C++ AVR追加到const char *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23835809/

10-11 22:09