You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中scanf(%100s)的功能及在字符串输入场景的运行逻辑

嘿,我来帮你把scanf("%100s")的功能和运行逻辑掰扯清楚,结合你给的代码来看就好懂多了!

核心功能:带安全限制的字符串读取

scanf("%100s", variable[i])最关键的作用就是从键盘读取字符串时,给读取长度加了严格上限——这里的100不是说能读100个字符,而是最多读99个,因为C语言的字符串必须以'\0'(空终止符)结尾,这个符号会自动占用一个位置。

对比不带数字的scanf("%s", ...),那个会一直读直到碰到空白字符(空格、回车、Tab),如果用户输入的字符串比数组长度长,就会溢出缓冲区搞坏内存,而加了数字的格式符就是专门用来避免这种危险的。

结合你的代码的运行逻辑

先看你这段代码:

char variable[20][200]; 
printf("Enter Strings\n"); 
for (i = 0; i < 10 ;i++) 
    scanf("%100s", variable[i]);

它的运行流程是这样的:

  • 你先声明了一个二维数组variable,能存20个字符串,每个字符串最多占200个字符(包括终止符),空间很充足。
  • 循环跑10次,每次处理一个字符串:
    1. 程序会卡在scanf这里,等你从键盘输入内容,直到碰到空白字符才停止读取当前字符串。
    2. 不管你输入多长,最多只会把前99个字符塞进variable[i],然后自动在末尾补'\0',保证这是个合法的C字符串,不会溢出你的200长度数组。
    3. 如果你一次输入了好几个用空格隔开的单词(比如apple banana),第一次scanf会读走apple,第二次循环的scanf会直接读banana,不用你再输入。
    4. 要是你直接按回车(没输入有效字符),scanf会跳过这些空白,继续等你输入非空白的内容。

几个容易踩坑的细节

  • 为啥你的数组是200长度,却只限制读100?因为这样留了足够的冗余空间,绝对不会溢出,是很安全的写法。如果把限制改成200,那实际最多读199个字符,加上终止符刚好占满200的数组。
  • %100s只会读取非空白字符,所以空格、回车这些会被当作字符串的分隔符,而不是字符串的一部分。如果你想读带空格的字符串,那scanf("%100s")就不行了,得用fgets之类的函数。

内容的提问来源于stack exchange,提问作者Nahit Özçepni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:03:04