C语言二维字符串数组声明及整串输入问题求解
解决方案
你声明的char str[20][20]本身就是合法的二维字符串数组,最多可以存储20个长度不超过19的字符串(需要预留1位存储C语言字符串必备的结束符\0)。你只需要把双层逐字符读取的逻辑改成单层循环、单次读取完整字符串即可,修改后的可运行代码如下:
#include <stdio.h> int main() { char str[20][20]; int i; // 单次读取一个完整字符串存入对应行 for (i = 0; i < 20; i++) { // %19s用于限制输入长度,避免输入过长导致数组越界 // str[i]本身就是第i行字符串的首地址,不需要额外加取地址符& scanf("%19s", str[i]); } // 测试输出,验证存储结果 for (i = 0; i < 20; i++) { printf("第%d个输入的字符串:%s\n", i+1, str[i]); } return 0; }
补充注意事项
- 上述代码的
%s格式符默认以空格、换行、制表符作为字符串分隔符,如果你需要读取带空格的整行内容,可以把scanf替换为fgets(str[i], 20, stdin),注意fgets会把输入末尾的换行符一并存入数组,如有需要可手动删除。 - 禁止输入超过单行容量的字符串,否则会触发内存越界,导致程序运行异常。
内容的提问来源于stack exchange,提问作者CR28
相关产品推荐
相关产品推荐

