婚车网站模版,海口编程培训有哪些机构,湖南省新闻最新消息十条,服务营销的概念问题描述#xff1a;
输入一串字符,将其中的大写变成小写#xff0c;若不为大写则原样输出
样例输入#xff1a;
A123b
样例输出#xff1a;
a123b
问题分析#xff1a;
潜在的缓冲区溢出风险#xff1a;
代码声明了一个大小为 100 的字符数组 str 来存储输入的字…问题描述
输入一串字符,将其中的大写变成小写若不为大写则原样输出
样例输入
A123b
样例输出
a123b
问题分析
潜在的缓冲区溢出风险
代码声明了一个大小为 100 的字符数组 str 来存储输入的字符串但没有检查输入字符串的长度是否超过数组的大小这可能导致缓冲区溢出。为了避免这种情况可以在调用 fgets 函数时限制输入的字符数例如 fgets(str, sizeof(str), stdin); 可以改为 fgets(str, 100, stdin);。
循环条件
在 for 循环中循环条件是 str[i] ! \0这是检查字符串是否结束的常见方法但这样的写法可能会导致数组越界。建议改为i sizeof(str)来确保不会访问超出数组界限的内存。
字符串结束符
fgets 函数会将换行符 \n 也读取并存储在字符串中因此在输出时会将其一同打印出来。如果不希望打印换行符可以在输出之前将其替换为空字符。
代码分析
这段代码的主要功能是将输入的字符串中的大写字母转换为小写字母并输出结果。
isupper 函数
用于检查字符是否为大写字母若是则返回非零值否则返回零
tolower 函数
用于将大写字母转换为小写字母如果参数不是大写字母则返回原始字符。
fgets函数
fgets 函数用于从标准输入流stdin中读取一行字符并存储到指定的字符串数组中。它的参数包括要存储输入内容的字符串数组、最大读取字符数以及要读取的流通常是 stdin。这个函数会将读取到的字符放入指定的数组中包括换行符 \n并在字符串末尾添加一个空字符 \0 来表示字符串的结束。
代码实现
#include stdio.h
#include ctype.hint main() {char str[100]; fgets(str, sizeof(str), stdin); for (int i 0; str[i] ! \0; i) {if (isupper(str[i])) { // 如果是大写字母printf(%c, tolower(str[i])); // 转换为小写字母并输出} else {printf(%c, str[i]); // 否则直接输出原字符}}return 0;
}