结束的NULL
最近同学叫我帮忙看个问题,为啥这个循环没有退出,
代码如下,原本是想拿到最后的NULL指针就可以结束循环
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h> typedef void (*Callback)(int);
void call_pin(int input);
void call_frequency(int input); struct CMD {
char* s; // short name
char* l; // long name
char c; // long name length(byte)
Callback call; // callback function
};
struct CMD *cmd = NULL;
struct CMD cmds[] = {
{"p", "pin", sizeof("pin"), call_pin},
{"f", "frequency", sizeof("frequency"), call_frequency},
NULL
}; void call_pin(int input)
{
printf("%s", __func__);
} void call_frequency(int input)
{
printf("%s", __func__);
} int main(int argc, char *argv[])
{
cmd = cmds;
do {
printf("%x\r\n", cmd);
printf("%x\r\n", *cmd);
} while (++cmd); return 0;
}
程序跑起来后while循环没有按照设想的推出,而是一直循环到段错误停止
++cmd在第三次并没有拿到NULL(就是0嘛) 拿到的应该是cmds第三个元素的地址,这个结构体元素的第一个数据是NULL。
后来想了一下如果循环改成
while(*(++cmd))
不久拿到了最后一个NULL了吗,但是代码在编译的时候就提示错误了。
RPiPWMH.c:40:14: error: used struct type value where scalar is required
} while (*(++cmd));
while循环判断条件需要的是一个纯标量,但是我们好像返回来的是个结构体
于是把这个转换char指针拿到第一个char的数据也就是NULL
while(*(char *)(++cmd))
结束的NULL的更多相关文章
- C语言之链表list
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...
- SQLite学习笔记(十二)&&虚拟机指令
上篇文章简单讨论了虚拟机的原理,这篇文章我们详细讨论下指令,具体从几种典型的SQL语句来看看每种SQL对应的指令流,以及每个指令的含义.通过explain语句,可以看到语句对应的指令流:通过pragm ...
- Java动态代理
代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...
- OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别
OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及VAO区别 1.glVertex 最原始的设置顶点方法,在glBegin和glEnd之间 ...
- 面试题目——《CC150》树与图
面试题4.1:实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个结点,其两颗子树的高度差不超过1. 思路:两个方法,第一种速度较快 package cc150; public ...
- jquery 扩展插件方法
分析插件jquery.countdown.js (function($) { $.fn.countdown = function(options) { // default options var d ...
- Java 的静态代理 动态代理(JDK和cglib)
转载:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是 ...
- 动态代理proxy与CGLib的区别
什么是代理? 静态代理与动态代理 静态代理实例 JDK动态代理实例 CGLib 简介 CGLib 与JDK动态代理的区别 代理模式是Java中常见的一种模式,英文名字叫走Proxy或者Surrogat ...
- Hibernate使用
实现类: public class InfoDAOImpl extends BaseDao<Info> 1.List<Object[]> midlist=super.creat ...
随机推荐
- 使用GitHub Pages + docsify快速搭建一个站点
话不多说,先看效果: https://bytesfly.github.io/blog 为什么需要一个站点 肯定有人会问,既然有类似 博客园 这样优秀的平台来写博客,为什么还需要自己搭建站点呢? 放在G ...
- 傻子都能懂的并查集题解——HDU1232畅通工程
原题内容: Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都 ...
- form表单提交失败
在使用一个登录/注册模板的时候,发现form表单不了,但是删除模板引用的js后就正常了,查看js文件的源码,有一个 const firstForm = document.getElementById( ...
- 【tp6】解决Driver [Think] not supported.
使用助手函数view时会出现 解决方法:使用composer安装composer require topthink/think-view
- ecshop 首页调用指定分类下的销售排行
/*首页调用指定分类下的销售排行*/ function get_cats_top10($cat = '') { $sql = 'SELECT cat_id, cat_name ' . 'FROM ' ...
- disruptor笔记之一:快速入门
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Java面向对象系列(7)- 什么是继承
继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模 extands的意思是"扩展".子类是父类的扩展 JAVA中类只有单继承,没有多继承 继承是类和类之间的一种关系. ...
- ci框架 自定义配置方法
系统自动在Application文件夹下生成的config.php文件,采用key-value关联数组的形式来存放配置项和值.为了使结构更清晰,手动新建另外一个配置文件myconfig.php,所采用 ...
- mysql允许别人通过ip访问本机mysql数据
要想允许别人通过ip访问本机mysql数据库,首先要是本机的mysql允许别的ip访问,也就是授权:其次别人的代码里,要写对本机的ip. 一.本机mysql的授权操作 1.cmd 进入控制台 2.输入 ...
- LR11可打开网页,但录制为空
环境:WIN7+LR11+360安全浏览器9.0 LR11可打开网页,但录制为空解决方案:(3步) 1. tools-Recording Options -->Network-->Port ...