iT邦幫忙

0

sprintf錯誤訊息(virtual studio2013 C++ ) 求大大解惑。

以下 這段是RFID讀卡機的範例程式

void HextoString(BYTE* bytBuffer, DWORD dwLength, char* OutString)
{
DWORD i = 0, j = 0;
j = 0;
for (i = 0; i < dwLength; i++)
j += sprintf(&OutString[j], "%02X ", bytBuffer[i]);
}

我的作業環境是WIN7 使用virtual studio2013
執行後會出現以下錯誤訊息
error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

我將sprintf 改為 sprintf_s後 又會出現以下錯誤訊息
error C2664: 'int sprintf_s(char *,size_t,const char *,...)' : 無法將引數 2 從 'const char [6]' 轉換為 'size_t'

網路上找了好幾個方法都無法排除C4996的問題
更改為sprintf_s後 我程式接觸不多也不知道如何修正 請各位大大幫忙!拜託了

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
wiseguy
iT邦超人 1 級 ‧ 2015-04-07 10:44:50

sprintf_s 要多補一個 size_t 的參數,以限定最大可輸入的空間。以你的例子來看,是輸出兩碼 16 進位碼跟一個空格,所以填 3 就好了。也就是第六行改為:

&lt;pre class="c" name="code">j += sprintf_s(&OutString[j], 3, "%02X ", bytBuffer[i]);
joskyo iT邦新手 5 級 ‧ 2015-04-07 10:56:51 檢舉

你好 我將3補上去之後,出現更多的錯誤訊息

是不是我還要再提供些甚麼資訊嗎?

fillano iT邦超人 1 級 ‧ 2015-04-07 14:21:10 檢舉

無法解析的外部符號跟sprintf_s應該沒關係,這表示wiseguy說的沒錯阿,所以...出現下一個錯誤了。

joskyo iT邦新手 5 級 ‧ 2015-04-07 17:24:57 檢舉

恩 新出現的錯誤目前排除掉兩個了,將lib給引入了剩下的錯誤不太曉得該引入哪個lib正在尋找中。

0
krarm
iT邦好手 1 級 ‧ 2015-04-07 11:13:37
joskyo iT邦新手 5 級 ‧ 2015-04-07 11:16:07 檢舉

謝謝 提供 這個方法有試過了沒有用!

我要發表回答

立即登入回答