整数指针转换为字符数组

4

我正在处理一个应用程序(使用Visual Studio中的C++语言),其中所有字符串都是通过整数指针引用的。

例如,我正在使用的类具有指向数据的整数指针和一个变量来存储大小。

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

我想知道:

  1. 使用int指针而不是char指针有哪些优点?

    经过深思熟虑,我怀疑这样做的原因可能是为了避免在没有空终止符的情况下使用char指针导致应用崩溃。但我不能百分之百确定。

  2. 调试期间如何检查指针的内容,其中内容是一个char数组或字符串(在Visual Studio中)。

    当我在调试时检查内容时,我只能看到地址。因此在调试中遇到困难。

    使用printf可以显示内容,但我无法在所有地方都使用它。

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

可能是为了避免这种编程错误才采用整数指针。

我使用的类具有将数据存储在整数指针和变量大小中的功能。

{

..

..

unsigned int *pData;

int iLen

}

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


3
你为什么要使用整型指针? - kfsone
4
  1. 不。
  2. 在代码中修正数据类型。
- user2486888
1
我不认为这在C或C++中会有任何有用的成果(请决定您使用的语言,它们有足够的差异需要不同的处理方式)。 - UnholySheep
2
如果它们是宽字符串,那么这是正确的行为(在MS编译器中,wchar_tunsigned short int的typedef)。 - M.M
2
通过发布代码示例,您将获得更好的答案。 - M.M
显示剩余8条评论
3个回答

1

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

  1. 使用int数组与char数组相比没有任何好处。实际上,如果每个整数表示自己的字符,则使用整数数组会占用更多的空间。这是因为一个字符占用一个字节,而一个整数占用四个字节。

  2. 关于在调试时打印内容,我不是Visual Studio的专家,因为我已经有一段时间没有使用过它,但大多数现代IDE都允许您在打印之前对其进行转换。例如,在lldb中,您可以执行po (char)myIntArray [0](po代表print)。在Visual Studio中,编写自定义可视化程序应该就可以解决问题


标准实际上并没有规定 charint 的大小,这取决于编译器(尽管你提到的大小对于大多数现代编译器来说是正确的)。 - UnholySheep
很抱歉错过了使用的语言。它是C++和C。我已经编辑了我的问题以包括语言。感谢您的答案。我会浏览自定义可视化器。 - Sagar
@Sagar 我已经在你的问题中发表了评论(这也是Majster想要澄清的),即 C 和 C++ 是不同的编程语言,需要不同的处理方式(和不同的代码)。请决定你正在使用哪一个。 - UnholySheep
@UnholySheep,是的,我知道它依赖于编译器,你指出了这一点很好。为了简单起见和易于理解,我仅使用“标准”值。 - Majster

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编码的字符串,使用专用的格式说明符。例如,在快速查看窗口中输入:

object->pData,su

代替只是

object->pData

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接