在C中打印字节字符



我有一个输入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

我在这里错过了什么?

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

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

你可以试试:

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

看看真正的密码。

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

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

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

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

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

  1. 将字符串从宽字符改为字符(wchar改为字符)
  2. 使用wprintf而不是printf打印宽字符字符串

祝你好运,

塔尔。

最新更新