c - 传递 C 字符串并将其与本地指针一起使用
问题描述
查看来自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;
这看起来很可能,但看起来不平衡,因为右侧缺少星号。我试过了,它似乎可以工作,但我想知道它是否正确,并担心我以后会遇到一些难以追踪的运行时错误,更进一步。
但是,下面这行显然是错误的(因为它会将指针更改为指向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]);
}
}
推荐阅读
- xslt - XSL 字体大小计算
- string - 我需要从 URL 路径中提取特定字符串
- pandas - 如何根据一列中的唯一值将 df 拆分为更小的 df,然后将每个 df 旋转到另一列
- angular - 更好地控制 Angular 渲染
- python - 在 django restframework search_filter 中禁用多重搜索
- websocket - Crystal Lang Websocket 服务器
- javascript - 带有 Kendo UI Panelbar 的 JavaScript 搜索栏
- c# - 合并 2 个共享相同 [0] 索引的对象数组数据系列
- macos - 无法在 Mojave 上显示 .DS_Store 文件
- javascript - 将一个字段的总分钟数四舍五入以将小时数填充到另一个字段