1

I have this code in my program but it doesn't print the numbers, but if I was to switch the "i" in the "((char)i)" to any normal character like say 'a', then it would print to the console.

Why doesn't this print to my console?

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

below prints successfully a line of 1000 "a":

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

4 回答 4

7

第一个字符的值为零。

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

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

于 2013-09-17T17:49:25.787 回答
3

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

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

于 2013-09-17T17:49:19.170 回答
1

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

见 ascii 表:http ://www.asciitable.com/

于 2013-09-17T17:52:17.453 回答
0

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

于 2013-09-17T19:41:18.687 回答