for循环中使用scanf仅首次迭代出现输入提示的问题
问题分析与解决
核心错误出在get_letters函数的scanf调用上:
scanf(" %c", letters[i]);中,%c格式符要求传入字符变量的内存地址,但letters[i]是char类型的具体值,不是地址。这种错误会导致scanf尝试向非法内存地址写入数据,触发未定义行为,程序执行第一次迭代后就异常退出。
修正后的代码
#include <stdio.h> #include <string.h> #include <ctype.h> void get_letters(char *letters, int number); int main() { char letters[10]; int number; memset(letters, '\0', 10); scanf("%d", &number); get_letters(letters, number); printf("%s\n", letters); return 0; } void get_letters(char *letters, int number) { for (int i = 0; i < number; i++) { printf("bruh\n"); // 传入字符的地址,修正非法内存访问问题 scanf(" %c", &letters[i]); } }
额外注意事项
- 确保输入的
number值不超过9(因为letters数组长度为10,需要预留一个位置给字符串结束符\0),否则会引发数组越界,同样导致未定义行为。
内容的提问来源于stack exchange,提问作者Ganz
相关产品推荐
相关产品推荐

