我正在写一个char数组,但是当我打印时,我得到2个不同的输出。我知道这是很多代码,但如果可以的话 - 请尽量了解为什么我每次都会得到不同的输出......第一个代码:
int len = strlen(oldStr);
int i = 0;
char c;
while (i < len - 1)
{
c = *(oldStr + i);
if (isSpace(c)) {
c = *(oldStr + i + 1);
if (!isSpace(c)) {
*(newStr + i) = '\0';
printf(" ");
}
} else {
*(newStr + i) = c;
printf("%c", *(newStr + i));
}
i++;
}
*(newStr + i) = '\0';
*(newStr + i + 1) = '\0';
当我在这里打印时,它会打印整个字符串列表。
但是,当我使用它来打印时:
for (i = 0; !(*(newStr + i) == '\0' && *(newStr + i + 1) == '\0'); i++) {
if (*(newStr + i) == '\0')
printf(" ");
else
printf("%c", *(newStr + i));
}
它只打印部分字符串。
例如:"One two three four\n\tfive six"
第一个代码打印"One two three four five six"
第二个代码打印"One two three"
为什么?
答案 0 :(得分:2)
如果您的输入文本中有两个连续的isspace(),如\n
后跟\t
,则不会在newStr []中输入任何内容,而是递增i
。这会在newStr []中为您提供一个未初始化的字符。