C_and_CPP 板


LINE

开发平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) None 问题(Question): 现在正在开发一个函式, 目的是要提供一个介面让使用者传送资料, 介面定义如下: SendVendorCmd(short cmd, char *data, int dataLength) 我目前知道的是如果进来的资料是用malloc配置记忆体的话, 可以用_msize来查看大小, 如果是null-terminated的字串的话, 可以用strlen来查看大小, 但是不确定使用者会用哪种配置方式, 而且这笔资料也不一定会是null-terminated, 所以我加了一个dataLength的参数。 又考虑到假如使用者丢的dataLength大小超过实际上data的长度, 可能会产生问题, 所以想请教有办法判断使用者传进来的data真正的长度吗? 还是有其他更适合的参数宣告吗? 喂入的资料(Input): None 预期的正确结果(Expected Output): None 错误结果(Wrong Output): None 程式码(Code):(请善用置底文网页, 记得排版) 补充说明(Supplement): --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 113.196.154.130
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1458612555.A.02D.html
1F:→ Caesar08: dataLength超过实际大小是使用者的问题吧,应该不用管 03/22 10:21
所以我应该本着使用者不会耍蠢的想法来做吗哈哈
2F:推 Clangpp: char *可以改用string就好了?? 这就不用担心了?? 03/22 12:09
3F:推 Clangpp: 不然就是用vector<char> 03/22 12:17
主要是因为丢进来的东西不一定真的是字串 也有可能是一整串硬体控制的指令 所以就没有考虑string了 vector<char>的部分我再研究看看 谢谢你的意见!!
4F:→ Caesar08: 我猜他可能只能用C 03/22 12:32
就只有介面的参数部分我是希望用不是C++的型别啦 所以只能舍弃掉很多好用的东西
5F:推 CaptainH: 应该只能这样 03/22 14:08
6F:推 noodleT: 你的data 会不会有0x00的资料?有的话就只能用datalength 03/23 07:11
基本上会有 不过我蛮好奇如果没有0x00的资料的话 有什麽其他的判断方法吗?
7F:推 Clangpp: 有0x00的话喔 你还是用vector<byte>吧 为什麽一定要用cha 03/23 09:55
8F:→ Clangpp: r呢?? 03/23 09:55
9F:→ Clangpp: 然後建议你可以去看 effecitve STL有教你如何用vector跟 03/23 09:57
10F:→ Clangpp: C的API来接 03/23 09:57
非常谢谢你的建议!! 至於为啥一定要用char... 因为送到硬体的资料我是用WriteFile 又是临时学C++的 所以不知不觉还是用C的写法在写这些东西 不过现阶段也不知道该怎麽做会比较好 我实际上是在开发JNI跟硬体之间沟通的API JNI丢下来的资料型态是jstring 不过刚刚查了一下jstring也可以转std::string std::string也可以转成char*让我可以丢进去WriteFile 这样看来用string是一个好主意 我再来研究一下如果要改成string该怎麽设计 也非常谢谢大家给的建议!!
11F:推 Clangpp: 我看了一下 WriteFile的API没有必要用char吧?? 03/23 22:02
实际上他是LPVOID的型别 不过因为我们用的硬体的关系 所以习惯都用char的阵列丢指令
12F:推 EdisonX: 硬体收发资料实际上是用 unsigned char 较佳。 03/24 10:01
想请教一下使用char会有什麽疑虑吗? 因为在Java的部分是没有unsigned的 如果会有问题我可能要想办法来测试一下...
13F:推 firejox: 要不然你就自己封装一个资料结构 让使用者用这个来传 03/24 23:06
例如使用struct然後在里面放入必要的变数吗?
14F:推 noodleT: 有一些标准函式也会要求使用者输入资料长度,或像 printf 03/26 23:09
15F:→ noodleT: 他也是信赖你输入的引数够给 format 使用。看你是想采取 03/26 23:09
16F:→ noodleT: 怎样的设计 03/26 23:09
17F:推 noodleT: 你的 data 有固定格式吗?例如结尾固定是两个0x00,0x00? 03/26 23:15
18F:→ noodleT: 这样的话就可以自己去扫阵列获得长度。 03/26 23:15
19F:→ noodleT: 题外话,你的引数 char *data 建议改成 const char *data 03/26 23:15
目前data没有固定格式耶 不过应该也是能规定使用者最後要加上去? 引数的部分我会再更改一下的 谢谢你的建议~
20F:推 Clangpp: 加const 是为了保护你传进来的资料不会被变动 03/27 22:17
21F:推 noodleT: const 也是让使用者能够信赖你不会去改我的值 03/27 23:22
谢谢两位的建议 小弟我对这部分的着墨实在是不够 还好有大家的帮助才能把这个东西做得更好!! ※ 编辑: petercoin (220.130.36.2), 03/28/2016 08:26:14







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP