2012-04-10 149 views
1

我正在對一些舊的C++代碼做一些靜態分析工作,而我的C++並不是最強大的。我有這樣一段代碼:C++索引TCHAR字符串

void NIDP_clDPLogger::log(TCHAR *logString) 
{ 
    TCHAR temp_logString[1024] = {0}; 
    _tcsncpy(temp_logString,logString,1024); 
    temp_logString[1023] = NULL; 
      ... 

靜態分析工具是在1024抱怨索引logString(傳遞給函數的參數)的位置時,它可能更短(大小各不相同,1024是最大大小我猜)。所以,我想我的解決方法是檢查logString的大小和使用,就像這樣:

void NIDP_clDPLogger::log(TCHAR *logString) 
{ 

    size_t tempSize = sizeof(logString); 
    TCHAR temp_logString[tempSize] = {0}; 
    _tcsncpy(temp_logString,logString,tempSize); 
    temp_logString[tempSize-1] = NULL; 

我只是想知道,將這項工作好不好?任何人都可以看到任何缺陷/問題嗎?構建和測試這個項目有點困難,所以我基本上只是在完成所有這些之前尋找一個完整的檢查。還是有更好的方法來做到這一點?我可以將size_t值傳遞給_tcsncpy,因爲之前有一個硬編碼的int嗎?

感謝您的幫助。

回答

3

sizeof(logString)將返回TCHAR*的大小,而不是傳遞數組時傳遞的數組大小作爲參數傳遞時衰減爲指針。

如果確保logString爲空終止,則可以使用_tcslen()獲取其長度。否則,知道logString大小的唯一方法就是將它作爲另一個參數傳遞給函數。

+0

好的,非常感謝這個hmjd! – DukeOfMarmalade 2012-04-10 10:49:42