如何组合C字符串和Arduino字符串?

我一直在为我的项目编写一个图书馆(现在我正在使用Arduino).我的问题是C和Arduino中的字符串不同.

也就是说,我希望我的图书馆独立于Arduino,所以我使用#include< string>后来声明字符串s.然而在Arduino中,字符串由Arduino定义并声明为String s2.

当我将我的库包含在草图中时,我会收到错误:string:没有这样的文件或目录,我试图包含C字符串库(#include< string>).

有没有办法使Arduino使用C字符串库,或者在编译时将字符串转换为Arduino字符串?

解决方法

几件事情

>我不知道你做什么独立于Arduino的理由.通常,编程微控制器不是一个非常可调的方式,可能与传统的计算机程序有很大不同.如果您真的要独立于任何微控制器和任何平台,您仍然可以使用C风格的字符串,char *指向一个字符数组.
做你想做的事不容易.首先你需要std :: string库的源代码.执行#include< string>还不够:您还必须编译AVR平台的字符串库.
>与古典计算机程序相比,Arduino处理C代码有一些“限制”:例如,运算符new和delete没有被实现.此外,std :: string实现可能需要其他方面的事情,因此要管理大量的依赖关系,或者对于Arduino来说,代码源大小太大.

有一些AVR微控制器的经典串行工具的实现,如Arduino,但是它们以C风格字符串的程序方式(而不是以面向对象的方式)完成.例如,对于avr-gcc,avr-gcc,你可以看到这里的功能列表:
avr-libc string.h
你甚至拥有好的旧版本:avr-libc stdio.h

如果您在代码添加了好的头文件,可以使用Arduino,但要注意代码的大小!只需使用printf就可以将大小增加几千字节,这对于微控制器来说可能是巨大的,这取决于您的需要.

总而言之,在我看来,唯一便携式的方式是使用char * string,http://arduino.cc/en/Reference/String

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...