在Arduino中将字符串转换为const char*?

12

我有一个字符串变量tweet,它的开头有一个字符,我想要把它去掉。

所以我想使用strstr()函数来实现。下面是我的代码:

tweet = strstr(tweet, "]");

然而,我收到了这个错误:

cannot convert 'String' to 'const char*' for argument '1' to 
'char' strstr(const char*, const char*)

我的想法是将 tweet 转换为字符。我应该如何做?


4
使用 c_str() 方法获取 const char* - ismail
2
看看 String 的定义,看看是否有适合的函数(例如 std::stringc_str() 成员函数)——希望有一些方法可以做到你想要的而不必去研究 C 风格的字符串。但是如果不知道 String 是什么,这个问题就无法得到答案。 - Mike Seymour
1
@Andrew,你为什么删除了Arduino标签?这样做会从问题中删除重要信息! - R. Martinho Fernandes
1
编写多语言源文件是一项艰巨的工作。我建议你坚持使用C或C++中的一种。 - pmg
6个回答

25

string有一个成员函数c_str(),返回一个 const char *类型的指针。


从技术上讲,如果读者理解了 OP 的问题,这就是正确的答案。如何将大写字母 S 字符串转换为 C 字符串,因为某些 API 要求这样做,而不是 std::string。API 参考 - truedat101

10

1
+1 识别 Arduino String 类而非 C++ 的 std::string。 - Dave Rager

1
我知道这是一个老问题,但如果你想比较特定的字符而不仅仅是字符串中的一个字母,那么你需要使用 string.charAt(n)。例如,如果你正在进行串行编程并且需要检查 STX (\02),那么可以使用以下代码。
char STX = '\02'

if (inputString.charAt(0) == STX) {
  doSomething();
}

1

你可以更容易地做到这一点。因为你正在使用C++:

tweet = tweet.substring(1);

substr() 函数返回一个字符串的一部分作为字符串。

参数是这个子字符串的起始点。由于字符串索引是基于0的,所以1应该剪掉第一个字符。

如果你想使用 strstr 函数,你可以将 tweet 强制转换为 C 字符串:

tweet = strstr( tweet.c_str(), "]" );

然而,这相当低效,因为它返回一个C字符串,必须再次转换为std::string才能适应推文。


0
使用以下语句tweet.c_str()将返回字符串缓冲区,使您能够执行所需的编辑。

0

看这里:

string.indexOf(val)
string.indexOf(val, from)

参数

string: a variable of type String
val: the value to search for - char or String
from: the index to start the search from

查看此页面


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接