整数指向char数组的指针

时间:2016-09-27 06:29:03

标签: c++ string pointers

我正在开发一个应用程序(visual studio上的C ++语言),其中所有字符串都用整数指针引用。

例如,我使用的类具有指向数据的整数指针和大小的变量。

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

我想知道

  1. 使用int指针代替char指针有什么好处吗?

    经过深思熟虑之后,我怀疑原因可能是为了避免在没有空终止的情况下使用char指针时可能发生的应用程序崩溃。但我不是百分百肯定。

  2. 在调试过程中,我们如何检查指针的内容,其中内容是char数组或字符串(在Visual Studio上)。

    我在调试期间检查内容时只能看到地址。因为这个我在调试方面遇到了困难。

    使用printf可以显示内容但我无法在所有地方执行此操作。

    我怀疑使用整数指针的原因可能是为了避免在没有空终止的情况下使用char指针时可能发生的应用程序崩溃。但我不是百分百肯定。

  3. 可能是为了避免这种程序错误,它被视为整数指针。

    我正在使用的类具有指向数据的整数指针和大小的变量。

    {

    ...

    ...

    unsigned int * pData;

    int iLen

    }

    如果您认为这不是原因,请纠正我。

3 个答案:

答案 0 :(得分:1)

请告诉我们您使用的语言,以便我们为您提供更好的帮助。至于你的问题:

  1. 使用int数组与char数组没有任何好处。实际上,拥有一个整数数组会占用更多空间(如果每个int代表它自己的字符)。这是因为char占用一个字节,其中整数占用四个字节。

  2. 至于在调试时打印东西我不是视觉工作室的主人,因为我还没有在一段时间内使用它,但是大多数现代IDE允许你在打印它们之前进行打印。例如,在lldb中,您可以po (char)myIntArray[0](po代表打印)。在视觉工作室writing a custom visualizer should do the trick

答案 1 :(得分:1)

我不确定你为什么要这样做,但是如果你想出于某种原因在你的字符串中存储一个EOF字符,你需要一个指向int的指针。

答案 2 :(得分: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