[问题] 传入函式的buffer长度判断问题

楼主: petercoin (彼得币)   2016-03-22 10:09:13
开发平台(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):
作者: EdisonX (卡卡兽)   2016-03-24 10:01:00
硬件收发资料实际上是用 unsigned char 较佳。
作者: Caesar08 (Caesar)   2016-03-22 10:21:00
dataLength超过实际大小是使用者的问题吧,应该不用管
作者: Clangpp (Clang++)   2016-03-22 12:09:00
char *可以改用string就好了?? 这就不用担心了??不然就是用vector<char>
作者: Caesar08 (Caesar)   2016-03-22 12:32:00
我猜他可能只能用C
作者: CaptainH (Cannon)   2016-03-22 14:08:00
应该只能这样
作者: noodleT (面T)   2016-03-23 07:11:00
你的data 会不会有0x00的资料?有的话就只能用datalength
作者: Clangpp (Clang++)   2016-03-23 09:55:00
有0x00的话喔 你还是用vector<byte>吧 为什么一定要用char呢??然后建议你可以去看 effecitve STL有教你如何用vector跟C的API来接
作者: firejox (Tangent)   2016-03-24 23:06:00
要不然你就自己封装一个资料结构 让使用者用这个来传
作者: noodleT (面T)   2016-03-26 23:09:00
有一些标准函式也会要求使用者输入资料长度,或像 printf他也是信赖你输入的引数够给 format 使用。看你是想采取怎样的设计你的 data 有固定格式吗?例如结尾固定是两个0x00,0x00?这样的话就可以自己去扫阵列获得长度。题外话,你的引数 char *data 建议改成 const char *data
作者: Clangpp (Clang++)   2016-03-27 22:17:00
加const 是为了保护你传进来的资料不会被变动
作者: noodleT (面T)   2016-03-27 23:22:00
const 也是让使用者能够信赖你不会去改我的值

Links booklink

Contact Us: admin [ a t ] ucptt.com