为什么2个输出不同?

时间:2017-01-08 20:31:12

标签: c

我正在写一个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"

为什么?

1 个答案:

答案 0 :(得分:2)

如果您的输入文本中有两个连续的isspace(),如\n后跟\t,则不会在newStr []中输入任何内容,而是递增i 。这会在newStr []中为您提供一个未初始化的字符。