在C中打印字节字符

时间:2012-11-29 17:16:57

标签: c string byte

我有一个输入c字符串,似乎是字节或八位字节。 当我打印它

printf("this is string[%s]\n", inputCstr);

它不打印整件事。 所以我试着像

一样循环它
for (int i=0; i<len; i++) {
    printf("inputCstr[%d] = %c", i, inputCstr[i]);
}

这会循环遍历整个字符串,但这实际上会跳过一些索引。例如,如果字符串是“abcdefg”,它将给出

之类的东西
inputCstr[0] = a
inputCstr[2] = c
inputCstr[5] = f

我在这里失踪了什么?

2 个答案:

答案 0 :(得分:3)

来自维基百科(http://en.wikipedia.org/wiki/Null-terminated_string):

  

在计算机编程中,以null结尾的字符串是一个字符   存储为包含字符和终止的数组的字符串   带有空字符('\ 0',在ASCII中称为NUL)。替代名称   是C字符串,它指的是C编程语言和ASCIIZ   (请注意,C字符串并不意味着使用ASCII)。

     

通过搜索(第一个)NUL找到C字符串的长度   字节

在你的情况下,我不得不说你可能正在使用一个宽字符串(unicode),每个字符使用2个字节。这就是为什么在打印字符串时只看到第一个字符的原因(因为第二个字节是'\ 0')。

为了正确打印字符串,您必须选择:

  1. 将字符串从wide-char更改为char(wchar to char)
  2. 使用wprintf代替printf以打印宽字符串
  3. 祝你好运,

    塔尔。

答案 1 :(得分:3)

这是因为字节数组中的控制字符由控制台专门解释。

在您的情况下,您可能遇到过,例如\r或类似情况,将光标移动到第1列,下一行覆盖前一列。

您可以尝试:

for (int i=0; i<len; i++) {
    printf("inputCstr[%d] = %02X\n", i, (unsigned char)inputCstr[i]);
}

看看真实的代码。