c - 语法困难,意外输出
问题描述
你能告诉我为什么通过运行这两个代码我有不同的输出吗?
void UART_OutString(unsigned char buffer[]){
int i;
while(buffer[i]){
UART_OutChar(buffer[i]);
i++;
}
}
和
void UART_OutString(unsigned char buffer[]){
int i = 0;
while(buffer[i]){
UART_OutChar(buffer[i++]);
}
}
问候, 格纳迪
解决方案
您没有i
在第一种情况下初始化变量,所以这是一个无趣的错字错误,您的编译器应该警告您...
话虽如此,我们可以应用KISS 原则并以最易读的方式重写整个代码,即 for 循环,从本质上讲,它很难忘记初始化循环迭代器:
void UART_OutString(const char* buf[]){
for(int i=0; buf[i]!='\0'; i++){
UART_OutChar(buffer[i]);
}
}
事实证明,最易读的方式通常也是最快的方式。
(但是,int
在某些低端系统上可能效率低下,所以如果您只使用长度为 255 或更短的字符串就可以了,那uint8_t i
将是一个更好的选择。嵌入式系统永远不应该使用int
这些stdint.h
类型。)
推荐阅读
- electron - Ubunut 17.10 上未显示电子托盘图标
- python - 将单个记录插入 HIVE Orc 表时,Pyspark spark.sql 很慢
- reactjs - 对象的属性类型是必需的还是空的?
- kubernetes - 将 Grafana 指标与不匹配的标签相结合
- vue.js - vue-cli:尝试从资产文件夹加载图像时出错
- python - 使用 for 循环创建多个注释
- c# - 将整个 DataGridView 保存为图像
- pyspark - 将 SQLserver jdbc 驱动程序连接到 Dataproc 集群
- spring-cloud-dataflow - SCDF - 具有多个标头的标头丰富处理器
- angular - 修改Primeng Paginator的模板