[問題] 用system()送cmd command

作者: williamsm (Roger)   2016-11-30 19:31:41
開發平台(Platform): (Ex: Win10, Linux, ...)
win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VS2013
問題(Question):
目前使用system(str_cmd)去下PSCP指令,在確定指令正確後準備送出
出現 L"buffer is too small" && 0 的錯誤訊息
預送出的str_cmd指令如下:
const char* str_cmd = pscp -sftp -l A -pw B -P 22
"C:\Users\Documents\Visual Studio 2013\Projects\xxx\xxxxxx\xxxx\ffff.txt"
sftp.Kkkk.com:
有先確認從cstring轉const char*與直接用cmd下是OK的,但送到system後就發生錯誤
我認為應該是system給帶的參數限制之類的,想請問這段要怎麼去避免呢?謝謝
作者: EdisonX (卡卡獸)   2016-11-30 20:54:00
這段應該是你先去試 pscp 怎麼用,確定能用後再放上來
作者: williamsm (Roger)   2016-11-30 22:35:00
您好,我這邊已經確定pack 同樣指令可以上傳與下載,但丟到程式裡的system這段就會有問題,我很確定問題發生在system,想說是否system帶的參數有長度限制?打錯,pscp 不是pack
作者: Schottky (順風相送)   2016-11-30 23:51:00
這字串常數怎麼看都是錯的啊前後要加引號
作者: EdisonX (卡卡獸)   2016-12-01 02:29:00
system 回報的錯誤是什麼 ? (猜可能是路徑問題 ?)
作者: williamsm (Roger)   2016-12-01 09:24:00
在單步執行system(".....")後出現->"buffer is too small" && 0 錯誤訊息,檢視看是在tcscpy_s.inl錯的
作者: Schottky (順風相送)   2016-12-01 09:31:00
單步執行時檢查一下送進去的字串正確嗎?
作者: williamsm (Roger)   2016-12-01 09:37:00
S大您好,抱歉上述的pscp 指令是給cmd的,給system 要首尾跟檔案位置要加減"",我用同一樣的command內容是一樣的,在cmd可執行
作者: Schottky (順風相送)   2016-12-01 09:53:00
我心中隱隱覺得問題就出在這裡字串常數沒處理好,想送進去的字串和實際送進去的不一樣
作者: EdisonX (卡卡獸)   2016-12-01 17:29:00
tcscpy_s.. 怎像是沒加結束字元爆掉的感覺,你有用這函式嗎?你的 cstringtoconstchar 裡最後的回傳是 ??
作者: williamsm (Roger)   2016-12-02 08:54:00
E大您好,return char result_temp1[200],這是回傳值後來用用一種方式cstring 轉const char*就成功,似乎用上面的轉法會有問題
作者: EdisonX (卡卡獸)   2016-12-02 19:28:00
恕我沒想幫你試 wcstombs_s, 我只納悶為何不用 _wsystem或 _tsystem , 非得要用 system ??
作者: williamsm (Roger)   2016-12-02 21:58:00
哈,e大說的正是我後來使用的方式,但我還是不知道為什麼要_tsystem才有用,用system則會失敗
作者: EdisonX (卡卡獸)   2016-12-03 03:48:00
很明顯mbcs系列函式用錯啊

Links booklink

Contact Us: admin [ a t ] ucptt.com