印刷字符和整数

时间:2013-09-17 17:45:05

标签: c++ c string char

我的程序中有这个代码,但它不打印数字,但如果我要将“((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);

4 个答案:

答案 0 :(得分:7)

第一个字符的值为零。

据推测,OutputDebugStringA将其参数解释为C风格的字符串:零终止字符序列。所以它会一直打印字符,直到找到零;在这种情况下,这将立即发生,所以什么都不会发生。

第二个例子给出了未定义的行为:它会在数组末尾结束并继续运行,直到它找到一个零值字节,或者到达一个不可读的内存位置并崩溃。

答案 1 :(得分:3)

在C中,字符串以空值终止。由于您将第一个字符设置为0,因此该字符串被视为空。

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

答案 2 :(得分:1)

可能因为从0开始,你没有输出。我将它保持在32&lt; =和&lt; = 127

之间

请参阅ascii表:http://www.asciitable.com/

答案 3 :(得分:0)

两件事,int i从0开始,这是空字节。这很可能是打印功能的终止字符。如果我从非零开始但仍然不打印,那么您可能必须考虑字节序。在litte-endian中,int从右向左读取,而字符从左到右读取,因此转换“可能”仅查看int的最左边的字节。