1

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

我在这里想念什么?

4

2 回答 2

5

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

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

你可以试试:

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

并查看真实代码。

于 2012-11-29T17:30:13.610 回答
4

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

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

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

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

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

  1. 将字符串从wide-char更改为char(wchar to char)
  2. 使用 wprintf 而不是 printf 以打印宽字符字符串

祝你好运,

塔尔。

于 2012-11-29T17:29:21.313 回答