正确输出后打印随机符号的C程序
C Program that prints random symbols after correct output
我想用 C 编写一个程序,将小写字母更改为大写字母,反之亦然,包括像 . 这样的符号。要么 -。当我给它一个没有符号的输入时它工作得很好,但是当我插入符号时程序打印随机字符。我被这个困住了,我不知道为什么会这样。
我已经看到两个 post 有类似的问题,但仍然没有弄清楚我的问题,两个 post 是:
- Why does it print random symbols when exceeding 44 characters
- Random symbols after manipulating a char array in C
输入示例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
一个字节
我想用 C 编写一个程序,将小写字母更改为大写字母,反之亦然,包括像 . 这样的符号。要么 -。当我给它一个没有符号的输入时它工作得很好,但是当我插入符号时程序打印随机字符。我被这个困住了,我不知道为什么会这样。
我已经看到两个 post 有类似的问题,但仍然没有弄清楚我的问题,两个 post 是:
- Why does it print random symbols when exceeding 44 characters
- Random symbols after manipulating a char array in C
输入示例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
一个字节