搜索
bottom↓
回复: 7

函数参数指针使用强制类型转换遇到问题?

[复制链接]

出0入0汤圆

发表于 2014-6-23 11:40:48 | 显示全部楼层 |阅读模式
想写一个函数,获取字符串首地址,然后转化为一个字符数组。由于要获取的参数,不仅仅是字符串类型,还有其它,所以希望在函数参数使用指针引用时进行强制转换,避免各种麻烦,函数如下:

void disp_char ((u8*) str_data)
{
  char string_cache[65];
  int i,j,n;
  for (n=0;(n<64)&&(string_cache[n]!='\0');n++)
  {
   string_cache[n]=*(str_data+i);
  }
}

编译时,报错如下:
error:  #79: expected a type specifier
void disp_char ((u8*) str_data)
                     ^

报错那个向上的小箭头指在(u8*) 前面。

我查了书,这么写是对的啊?怎么会说我少一个 type specifier呢?(u8*) 不是表示强制转化为u8的指针类型吗?

出0入50汤圆

发表于 2014-6-23 12:00:27 | 显示全部楼层
函数里参数声明,你那加了括号就是转换,肯定不对了

出0入0汤圆

 楼主| 发表于 2014-6-23 12:04:07 | 显示全部楼层
span42 发表于 2014-6-23 12:00
函数里参数声明,你那加了括号就是转换,肯定不对了

那咋办呢?而且我记得以前有人这么用过的,也没出错呀?

出0入0汤圆

发表于 2014-6-23 12:06:59 | 显示全部楼层
调用这个函数的时候  对 输入参数 “实际参数” 进行强制   ——常用

或者

函数体内部使用 str_data 时 进行强制    局限  ——不常用

出0入50汤圆

发表于 2014-6-23 12:09:28 | 显示全部楼层
void disp_char (u8*  str_data) {...}  定义 这么写

调用的时候  disp_char ((u8*)str); 才这么写

出0入0汤圆

发表于 2014-6-23 12:09:49 | 显示全部楼层
void *是干嘛用的?

出0入0汤圆

 楼主| 发表于 2014-6-23 12:15:49 | 显示全部楼层
wear778899 发表于 2014-6-23 12:06
调用这个函数的时候  对 输入参数 “实际参数” 进行强制   ——常用

或者

好的,你说得有道理,我多半记错了。

这样一来的话改的东西可就多了……

出0入0汤圆

发表于 2014-6-23 15:09:40 | 显示全部楼层
传授你一招不外传的无节操小技巧。
自己封装一个String类型,哪还要搞什么字符串转数组这么浪费时间又无意义的东西。

  1. typedef struct
  2. {
  3.   char* charArr;
  4.   int16_t len;
  5. }StringStruct;

  6. #define String(n,m)  \
  7.   StringStruct n={m,sizeof(m)}
复制代码


除了C库内置的printf以外,一般我们从串口传数据都是自己写的发送函数,讲真,就是printf也是非常没节操的,封装的操作太多确实大而全,但是为了很多我们用不上的功能去花这个代价不划算。
更重要一点,运行时间太长,放在中断里面会比较蛋疼。所以我们都自己写。
自己写的时候,用上我上面那个String类型就爽啦~

为什么呢,因为除了基础的字符数组以外,我连长度一起带了,对于有buffer或者开DMA发数据的方式,这种办法更简单。
更重要的是,从一开始就把字符串的长度封装进去了以后,可以为所有的处理函数提供一个统一的接口。以后需要其他功能,也可以通过继续添加新的字段来实现。

  1. String(Name,"Name is what?");
  2. /*MyPrint(StringStruct string) 等同于:print(char* charArr,int16_t len)*/
  3. MyPrint(Name);=>print(Name.charArr,Name.len);
复制代码
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 08:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表