正确输出后打印随机符号的C程序

C Program that prints random symbols after correct output

我想用 C 编写一个程序,将小写字母更改为大写字母,反之亦然,包括像 . 这样的符号。要么 -。当我给它一个没有符号的输入时它工作得很好,但是当我插入符号时程序打印随机字符。我被这个困住了,我不知道为什么会这样。

我已经看到两个 post 有类似的问题,但仍然没有弄清楚我的问题,两个 post 是:

输入示例1:

asd.DSA

输出示例 1:

ASD.dsa

1-\y�

输入示例2:

asdDSA

输出示例2:

ASDdsa

代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>

int main(void) {
    pid_t readWrite;
    pid_t changeString;

    readWrite = fork();

    if(readWrite == 0) {
        char str[49];
        while(fgets(str, 50, stdin) != NULL) {
            printf("%s", str);

            changeString = fork();

            if(changeString == 0) {
                int result = 0;
                char newstr[49];
                for(int i = 0; i < strlen(str); i++) {
                    if(str[i] >= 'A' && str[i] <= 'Z') {
                        newstr[result++] = str[i] + 32;
                    } else if (str[i] >= 'a' && str[i] <= 'z') {
                        newstr[result++] = str[i] - 32;
                    } else {
                        newstr[result++] = str[i];
                    }
                }

                printf("%s", newstr);

                break;
            }
        }

    }
    while(wait(NULL)>0);
    return 0;
}
  • newstr 应为 nul-terminated(或印有 printf("%.*s", result, newstr)
  • fgets 可能溢出 str 一个字节