查看来自 The Evils of Arduino Strings 的代码
void PrintString(const char *str) {
const char *p;
p = str;
while (*p) {
Serial.print(*p);
p++;
}
}
我正在考虑减少/压缩它。首先,这似乎是等价的:
void PrintString(const char *str) {
const char *p;
p = str;
while (*p)
Serial.print(*p++);
}
现在,看看前两行,我怎样才能将后面两行组合起来,这可能吗?
const char *p;
p = str;
我可以这样做吗?
const char *p = str;
这看起来很有可能,但看起来不平衡,因为右侧缺少星号。我试过了,它似乎可以工作,但我想知道它是否正确,并且担心我以后会遇到一些hard-to-track-down运行时错误,进一步向下行。
但是,下面这一行显然是错误的(因为它会将指针 p
更改为指向由 C 字符串 str
的第一个字符的值给出的位置>):
const char *p = *str;
最佳答案
这是混淆。原始代码非常清楚,无需更改任何内容。您的更改会降低其可读性。
您可以做的是稍微增加可读性,这是一个表面上的改变,是使用 for 循环代替:
void PrintString (const char *str)
{
for(const char* p=str; *p != '\0'; p++)
{
Serial.print(*p);
}
}
或者:
void PrintString (const char *str)
{
for(size_t i=0; str[i] != '\0'; i++)
{
Serial.print(str[i]);
}
}
关于c - 传递 C 字符串并将其与本地指针一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833699/