c - 为什么2个输出不同?

标签 c

<分区>

我正在写入一个字符数组,但是当我打印时,我得到了 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));
}

它只打印部分字符串。

例如:“一二三四\n\t五六”
第一个代码打印“一二三四五六”
第二个代码打印“一二三”

为什么?

最佳答案

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

关于c - 为什么2个输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537542/

相关文章:

java - C 服务器到 Java 客户端套接字读取以短值传递

c++ - MPI_Gather()、MPI_Scatter()中发送计数和接收计数有什么区别?

c - 出现错误 C2440

c - 理解scanf

c - 这个C宏是什么意思?

c - ffmpeg/libavfilter 中的字幕

android - 库 .so 文件中 `const char *` 存储的奇怪行为

c - 在c中构建字符串的方法

c - 为什么宏在 libc 中可以滥用

c - 使用函数修改结构体中字符串的内容