2016-09-27 68 views
4

我正在使用整型指針引用所有字符串的應用程序(Visual Studio上的C++語言)。字符數組的整型指針

例如,我正在使用的類具有此數據的整數指針和大小的變量。

{ 
    .. 
    .. 
    unsigned short int *pData; 
    int iLen 
} 

我想知道

  1. 是否有使用int指針代替char指針的任何好處?

    經過深思熟慮之後,我懷疑原因可能是爲了避免應用程序崩潰,如果不使用空終止使用char指針可能會發生應用程序崩潰。但我不是100%肯定的。

  2. 在調試過程中,我們如何檢查指針的內容,其中的內容是char數組或字符串(在Visual Studio上)。

    我只能在調試期間檢查內容時看到地址。因爲這個,我在調試時遇到困難。

    使用printf可以顯示內容,但我無法在所有地方完成。

    我懷疑使用整型指針的原因可能是爲了避免應用程序崩潰,如果使用沒有空終止符的char指針可能發生應用程序崩潰。但我不是100%肯定的。

可能是爲了避免這樣的程序錯誤它被當作整數指針。

我正在使用的類具有此數據的整數指針和大小的變量。

{

..

..

無符號整型* pData所;

INT艾朗

}

請糾正我,如果你認爲這不能成爲理由。

+3

*爲什麼*您正在使用一個int指針? – kfsone

+4

1.否。2.修復代碼中的數據類型。 –

+1

我不明白這是否會在C或C++中實現任何有用的功能(也請確定您正在使用哪種語言,它們有足夠的差異來要求不同的處理) – UnholySheep

回答

1

請讓我們知道您正在使用哪種語言,以便我們可以幫助您更好一點。至於你的問題:

  1. 沒有使用int陣列與char陣列的好處。事實上,整數數組佔用更多的空間(如果每個int代表它自己的字符)。這是因爲char在一個整數佔4的地方佔用一個字節。

  2. 至於在調試時打印東西我不是視覺工作室的主人,因爲我在一段時間內沒有使用它,但大多數現代IDE允許您在打印之前先投射東西。例如在lldb中,你可以做po (char)myIntArray[0](po代表打印)。在視覺工作室writing a custom visualizer should do the trick

+0

該標準實際上並未指定'char'或'int'的大小,它依賴於編譯器(儘管您提到的大小對於大多數現代編譯器都是正確的) – UnholySheep

+0

對不起,錯過了使用的語言。它是C++&C。我編輯了我的問題以包含語言。感謝你的回答。我將通過自定義可視化工具查看。 – Sagar

+0

@Sagar我已經評論過你的問題(這是Majster想澄清的)C和C++是不同的編程語言,需要不同的處理方式(和不同的代碼)。請決定使用哪一個。 – UnholySheep

1

我不知道你爲什麼會想這樣做,但如果你想EOF字符存儲在您的字符串出於某種原因,你需要一個指針爲int。

1

MS Visual Studio經常使用UTF-16來存儲字符串。 UTF-16需要16位數據類型,您的應用程序使用unsigned short,而更正確的名稱是uint16_t(或者wchar_t,但我不確定)。

另一種存儲字符串的方法使用UTF-8;如果使用這種方式,請使用指向char(不方便)或std::string(更方便)的指針。但是,您在這裏沒有任何選擇;你不會改變你的應用程序存儲字符串的方式(這可能太乏味了)。

要查看您的UTF-16編碼字符串,請使用專用的format specifier。例如,在一個快速監視窗口,輸入:

object->pData,su 

,而不是僅僅

object->pData