打印字符和整数

printing chars and ints

本文关键字:整数 字符 打印      更新时间:2023-10-16

我的程序中有这段代码,但它不打印数字,但是如果我将"(char)i)"中的"i"切换到任何普通字符,比如说"a",那么它会打印到控制台。

为什么这不打印到我的主机?

char debugStr[1000];
for(int i = 0; i < 1000; i++)
    {
        debugStr[i] = ((char)i);
    }
OutputDebugStringA(debugStr);

下面成功打印了一行 1000 "A":

    char debugStr[1000];
    for(int i = 0; i < 1000; i++)
        {
            debugStr[i] = ((char)'a');
        }
    OutputDebugStringA(debugStr);

第一个字符的值为零。

据推测,OutputDebugStringA将其参数解释为 C 样式字符串:以零结尾的字符序列。所以它会继续打印字符,直到找到零;在这种情况下,这将立即发生,因此不会有任何结果。

第二个示例给出了未定义的行为:它将从数组的末尾蹒跚而行并继续前进,直到找到零值字节,或者到达不可读的内存位置并崩溃。

在 C 中,字符串以 null 结尾。由于将第一个字符设置为 0,因此该字符串被视为空。

23(数字)与"23"(字符串)非常不同。

可能因为你从 0 开始,所以你没有得到任何输出。我会把它保持在 32 <= 和 <= 127 之间

参见ASCII表:http://www.asciitable.com/

两件事,int i 从 0 开始,这是空字节。 这很可能是打印函数的终止字符。如果我从非零开始并且仍然不打印,那么您可能需要考虑字节序。在 litte-endian 中,int 是从右到左读取的,而字符是从左到右读取的,因此转换"可能"只查看 int 的最左边的字节。