[問題] 傳入函式的buffer長度判斷問題
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1458612555.A.02D.html
→
03/22 10:21, , 1F
03/22 10:21, 1F
所以我應該本著使用者不會耍蠢的想法來做嗎哈哈
推
03/22 12:09, , 2F
03/22 12:09, 2F
推
03/22 12:17, , 3F
03/22 12:17, 3F
主要是因為丟進來的東西不一定真的是字串
也有可能是一整串硬體控制的指令
所以就沒有考慮string了
vector<char>的部分我再研究看看
謝謝你的意見!!
→
03/22 12:32, , 4F
03/22 12:32, 4F
就只有介面的參數部分我是希望用不是C++的型別啦
所以只能捨棄掉很多好用的東西
推
03/22 14:08, , 5F
03/22 14:08, 5F
推
03/23 07:11, , 6F
03/23 07:11, 6F
基本上會有
不過我蠻好奇如果沒有0x00的資料的話
有什麼其他的判斷方法嗎?
推
03/23 09:55, , 7F
03/23 09:55, 7F
→
03/23 09:55, , 8F
03/23 09:55, 8F
→
03/23 09:57, , 9F
03/23 09:57, 9F
→
03/23 09:57, , 10F
03/23 09:57, 10F
非常謝謝你的建議!!
至於為啥一定要用char...
因為送到硬體的資料我是用WriteFile
又是臨時學C++的
所以不知不覺還是用C的寫法在寫這些東西
不過現階段也不知道該怎麼做會比較好
我實際上是在開發JNI跟硬體之間溝通的API
JNI丟下來的資料型態是jstring
不過剛剛查了一下jstring也可以轉std::string
std::string也可以轉成char*讓我可以丟進去WriteFile
這樣看來用string是一個好主意
我再來研究一下如果要改成string該怎麼設計
也非常謝謝大家給的建議!!
推
03/23 22:02, , 11F
03/23 22:02, 11F
實際上他是LPVOID的型別
不過因為我們用的硬體的關係
所以習慣都用char的陣列丟指令
推
03/24 10:01, , 12F
03/24 10:01, 12F
想請教一下使用char會有什麼疑慮嗎?
因為在Java的部分是沒有unsigned的
如果會有問題我可能要想辦法來測試一下...
推
03/24 23:06, , 13F
03/24 23:06, 13F
例如使用struct然後在裡面放入必要的變數嗎?
推
03/26 23:09, , 14F
03/26 23:09, 14F
→
03/26 23:09, , 15F
03/26 23:09, 15F
→
03/26 23:09, , 16F
03/26 23:09, 16F
推
03/26 23:15, , 17F
03/26 23:15, 17F
→
03/26 23:15, , 18F
03/26 23:15, 18F
→
03/26 23:15, , 19F
03/26 23:15, 19F
目前data沒有固定格式耶
不過應該也是能規定使用者最後要加上去?
引數的部分我會再更改一下的
謝謝你的建議~
推
03/27 22:17, , 20F
03/27 22:17, 20F
推
03/27 23:22, , 21F
03/27 23:22, 21F
謝謝兩位的建議
小弟我對這部分的著墨實在是不夠
還好有大家的幫助才能把這個東西做得更好!!
※ 編輯: petercoin (220.130.36.2), 03/28/2016 08:26:14