2017-04-15 59 views
1

我有一些代码有问题。 已经阅读了大量的主题,但大多数都与定制库有关。arduino,错误:类型'char [14]'和'char [5]'到二元'operator +'的操作数无效

我的代码与任何自定义库都没有关系。 我希望你们中的一些人知道我做错了什么。 我只是试图将两个字符串“合并”成一个新的变量。

错误:

sketch_SS01:13: error: invalid operands of types 'char [14]' and 'char [5]' to binary 'operator+' 
char apiPath = apiPage + pid; 
        ^
exit status 1 
invalid operands of types 'char [14]' and 'char [5]' to binary 'operator+' 

错误有关此代码:

// api details 
char apiPage[] = "/api.php?pid="; 
char pid[] = "8855"; 
char apiPath = apiPage + pid; 

回答

2

编译器说的:你不能用operator+来连接C字符串(即char[])。您需要使用库函数strcat或更安全的兄弟strncat

字符串x的级联到串deststrcat (dest,x);但请查阅文档,并与字符数组打交道时格外注意缓冲区溢出的风险。

要写出您的例子,因为它是写你可以做

// api details 
char apiPage[] = "/api.php?pid="; 
char pid[] = "8855"; 
char apiPath[100] = ""; // make sure it' long enough and initialized to empty string 
strcat(apiPath, apiPage); 
strcat(apiPath, pid); 

,或者你可以使用复制在使用strcpystrncpy目标字符串的正确位置的字符串。

增加:

A(也许是更好/更简单/更安全),另一种方法是使用String类具有所有期望的字符串功能(如构造函数,添加,添加等):看https://www.arduino.cc/en/Reference/StringObject

+0

谢谢,这很好。但为什么他们不能作为全局变量?它只在将它放入setup()或loop()函数/作用域内时才有效。 –

+0

什么不行?顺便说一句,我刚刚更新了我的答案,并引用了'适当'字符串类来替代'char []' – drRobertz

+1

来澄清我的“什么不行?”我希望它也可以像全局变量一样工作,除非由于某种原因全局变量以只读内存结束。 (但我没有在arduino上做过这个)。你如何声明非工作的全局变量?问题是什么?编译错误或错误行为? – drRobertz

相关问题