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