【发布时间】:2021-05-18 04:12:44
【问题描述】:
所以,我尝试用 C 语言创建一个程序,将大写字符转换为小写,只需将 32 加到大写字符即可。
#include <stdio.h>
int main()
{
char user_inp[16];
char final_res[16];
int ascii;
printf("%s", "Enter any string : ");
scanf("%s", &user_inp);
for (int i = 0; user_inp[i] != 0; i++){
ascii = (int) user_inp[i];
if (ascii < 91&& ascii > 64){
ascii = ascii + 32;
}
final_res[i] = ascii;
}
printf("%s\n", final_res);
return 0;
}
但是当我运行它时,我得到了一些额外的jibrish结果。
For example,
Input : Apple
Output : apple
But,
Input : Encyclopedia
Output : encyclopedia�U
我遇到了什么问题?我该如何解决这个问题?
【问题讨论】:
-
您没有初始化
final_res,因此输出字符串不会以空值结尾,并且在字符串打印到 is 找到。最简单的修复:char final_res[16] = ""; -
您的代码中有一些不好的做法:如果没有必要,切勿使用幻数。如果要与
'A'进行比较,请使用>='A',而不是>64。如果要转换大小写字母,请使用ctype.h中的标准函数tolower()。虽然攻击非 ASCII 系统的机会确实很小,但依赖此类实现定义的细节绝不是一个好主意。