我有一个输入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
我在这里失踪了什么?
答案 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 :(得分:3)
这是因为字节数组中的控制字符由控制台专门解释。
在您的情况下,您可能遇到过,例如\r
或类似情况,将光标移动到第1列,下一行覆盖前一列。
您可以尝试:
for (int i=0; i<len; i++) {
printf("inputCstr[%d] = %02X\n", i, (unsigned char)inputCstr[i]);
}
看看真实的代码。