C语言gets与scanf赋值给有初始值的字符数组问题 C语言中 为什么用scanf在给 数组和字符数组赋值是 数组...

c\u8bed\u8a00 gets\uff08\uff09\u4f1a\u4e0d\u4f1a\u628a\u539f\u6570\u7ec4\u7684\u503c\u5168\u90e8\u8986\u76d6\u6389\uff1f\u6bd4\u5982\u539f\u6570\u7ec4\u4e2d\u67091234\u56db\u4e2a\u5b57\u7b26\uff0c\u901a\u8fc7gets\u8f93\u5165abc\uff0c\u6700\u7ec8

gets\u5f97\u5230\u7684\u662f\u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32\u662f\u4ee5'\0'\u7ed3\u5c3e\u7684\u5566\u3002
\u5982\uff1a
char a[10];
gets(a);//\u4f60\u8f93\u51651234\uff0c\u5219a\u91cc\u5b58\u50a8\u7684\u5185\u5bb9\u662f"1234\0",\u4e00\u5171\u5360\u4e865\u4e2a\u4f4d\u7f6e\uff0c\u4e0d\u8981\u5fd8\u4e86'\0'
gets(a);//\u8fd9\u91cc\u4f60\u8f93\u5165abc\uff0c\u5219a\u5b58\u50a8\u7684\u5185\u5bb9\u662f"abc\0\0",\u770b\u5230\u6ca1\u6709\u4e24\u4e2a\0\u4e86\uff0c\u800c\u8f93\u51fa\u5b57\u7b26\u4e32\uff0c\u662f\u9047\u5230\0
//\u5c31\u7ed3\u675f\u7684\u5566\u3002\u5982\u679c\u4f60\u8f93\u5165ab\uff0c\u5219a\u5b58\u50a8\u7684\u5185\u5bb9\u662f"ab\04\0",\u4f60\u53ef\u4ee5\u8bd5\u7740\u8f93\u51faa[3]\uff0c\u90a3\u4e48\u5b83\u4f1a\u8f93\u51fa4\uff0c
//\u4e0d\u4fe1\uff1f\u4f60\u53ef\u4ee5\u8bd5\u4e00\u8bd5\u5566

\u53ef\u4ee5\u4ecescanf\u51fd\u6570\u7684\u51fd\u6570\u539f\u578b\u6765\u8fdb\u884c\u89e3\u91ca\u3002
\u51fd\u6570\u539f\u578b\uff1aint scanf(char *format, args, ...);
\u529f \u80fd\uff1a\u4ece\u6807\u51c6\u8f93\u5165\u8bbe\u5907\u6309format\u6307\u5b9a\u7684\u8f93\u5165\u683c\u5f0f\u5c06\u6570\u636e\u8f93\u5165\u5230args\u6240\u6307\u5411\u7684\u5185\u5b58\u5355\u5143
\u8fd4 \u56de \u503c\uff1a\u8bfb\u5165\u5e76\u8d4b\u7ed9args\u7684\u6570\u636e\u4e2a\u6570\u3002\u9047\u6587\u4ef6\u7ed3\u675f\u8fd4\u56deEOF\uff0c\u51fa\u9519\u8fd4\u56de0

\u4ecescanf\u51fd\u6570\u7684\u51fd\u6570\u539f\u578b\u53ef\u4ee5\u770b\u51fa\uff0cscanf\u63a5\u6536\u5230\u7684\u6570\u636e\u662f\u8d4b\u7ed9args\u6307\u5411\u7684\u5185\u5b58\u5355\u5143\u7684\uff0c\u4e5f\u5373args\u662f\u4e00\u4e2a\u5185\u5b58\u5730\u5740\uff0c\u800c\u53d8\u91cf\u7684\u5185\u5b58\u5730\u5740\u7528\u53d6\u5730\u5740\u7b26&\u6765\u8868\u793a\uff0c\u6570\u7ec4\u7684\u5730\u5740\u5c31\u662f\u6570\u7ec4\u540d\u3002\u6240\u4ee5\u6570\u7ec4\u7684\u524d\u9762\u4e0d\u7528\u52a0&

\u4e3e\u4f8b\u5982\u4e0b\uff1a
int a; // \u5b9a\u4e49\u4e00\u4e2a\u53d8\u91cfchar b[3]; // \u5b9a\u4e49\u4e00\u4e2a\u5b57\u7b26\u6570\u7ec4char *str=(char *)malloc(sizeof(char)*4); // \u5b9a\u4e49\u5b57\u7b26\u4e32\u5e76\u5206\u914d\u5185\u5b58\u5355\u5143scanf("%d%d%s", &a, b, str); // \u53d8\u91cfa\u7684\u5730\u5740\u4e3a&a\uff0c\u6570\u7ec4b\u7684\u5730\u5740\u4e3a\u6570\u7ec4\u540db\uff0c\u5b57\u7b26\u4e32\u7684\u5730\u5740\u4e3astr

1、scanf你用的格式为"%c",所以只会读入单个的字符,不管是普通字符还是空格回车tab都会直接输入给对应的char变量。如果用的格式为"%s",那么会忽略空格、回车、tab 。

2、gets不会清空,但gets会忽略输入结尾的那个回车,然后加个'\0'来确保字符串正确结束,所以第一个列子中,前10个字符输入给a,然后剩下“_is red.“,被写入b,然后加个0,所以b实际变成了” is red._s blue.",这里_代表\0 。

1、gets函数:
原型:char * gets(char * buffer);
功能:从stdin流中读取字符串,直至读到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为 \0 空字符,并以此结束字符串;
说明:当使用unicode宽字符文本时,请使用宽字符版本函数 _getws()。gets函数可以无限读取,不会判断上限,所以使用时应确保buffer的空间足够大,以便在执行读取操作时不发生溢出。gets函数在C11标准中被移除,改为更加安全的gets_s函数;
头文件:stdio.h;
返回值:若读入成功,返回与参数buffer相同的字符指针。若读入过程中遇到EOF或发生错误,返回NULL指针。所以当遇到返回值为NULL的情况时,应使用ferror或feof函数检查是发生错误还是遇到EOF。
2、例程:

#include <stdio.h>
int main(){
    char buffer[5];//定义缓存字符数组buffer
    gets(buffer);//用gets函数从stdin流中读入字符串,因为buffer长度是5,输入不能超过4个字符
    printf("%s",buffer);//在stdout流中输出读入的字符串
    return 0;
}


首先,你的问题一,当然你说的什么is blue啊的肯定是存在的,因为系统不会傻到去做毫无意义的事。然后,我告诉你答案,其实很简单。你只要在main()的最后一行加上一句,就OK:printf("%d",b[8]);
我得到了一个0,也就是说,系统在获得了你的剩余的is red.后,就把之后的一位设成了'\0',当然,你知道这意味着什么。

然后,问题二,非常简单,因为你只是逐个逐个的修改了b里面元素的值,系统并不会自动给你加上'\0',这样,后面的就不变。
最后,告诉你一件亘古不变的真理,系统一般不去清空什么,因为本来要改变值改变就可以了,为什么要先变成另一个呢,最后告诉你,请你记住一件事,那就是'\0',这非常重要,搞不好就会出错

  • C璇█gets涓巗canf璧嬪缁欐湁鍒濆鍊肩殑瀛楃鏁扮粍闂
    绛旓細1銆scanf浣犵敤鐨勬牸寮忎负"%c"锛屾墍浠ュ彧浼氳鍏ュ崟涓殑瀛楃锛屼笉绠℃槸鏅氬瓧绗﹁繕鏄┖鏍煎洖杞ab閮戒細鐩存帴杈撳叆缁欏搴旂殑char鍙橀噺銆傚鏋滅敤鐨勬牸寮忎负"%s"锛岄偅涔堜細蹇界暐绌烘牸銆佸洖杞︺乼ab 銆2銆gets涓嶄細娓呯┖锛屼絾gets浼氬拷鐣ヨ緭鍏ョ粨灏剧殑閭d釜鍥炶溅锛岀劧鍚庡姞涓'\0'鏉ョ‘淇濆瓧绗︿覆姝g‘缁撴潫锛屾墍浠ョ涓涓垪瀛愪腑锛屽墠10涓瓧绗﹁緭鍏ョ粰a锛...
  • c璇█,gets鍑芥暟鐨勮缁嗙敤娉?
    绛旓細c璇█锛実ets()鍑芥暟鐢ㄦ潵浠庢爣鍑嗚緭鍏ヨ澶囷紙閿洏锛璇诲彇瀛楃涓鐩村埌鎹㈣绗︾粨鏉燂紝浣嗘崲琛岀浼氳涓㈠純锛岀劧鍚庡湪鏈熬娣诲姞'\0'瀛楃銆傚叾璋冪敤鏍煎紡涓猴細gets(s)銆傚叾涓璼涓哄瓧绗︿覆鍙橀噺锛堝瓧绗︿覆鏁扮粍鍚嶆垨瀛楃涓叉寚閽堬級銆傚鏋滀负鍗曚釜瀛楃鎸囬拡锛岀紪璇戣繛鎺ヤ笉浼氭湁閿欒锛屼絾杩愯鍚庡唴瀛樻孩鍑洪敊璇
  • c璇█scanf涓轰粈涔堜笉鑳界洿鎺璧嬪?
    绛旓細1銆scanf("%d锛%d",&a,&b)锛涙寜鐓ц繖涓牸寮忥紝杈撳叆鏁版嵁鐨勬椂鍊欙紝搴旇鍔犱笂閫楀彿銆傛瘮濡傝鎯宠緭鍏22 33 灏卞簲璇 22锛33銆2銆佷篃鍙互鍍忚繖鏍穝canf("%d %d",&a,&b)锛涗腑闂寸敤绌烘牸闅斿紑锛岄偅鏍峰氨鍙互鐩存帴杈撳叆 22 33浜嗐俿canf 鐨勫姛鑳界敤涓鍙ヨ瘽鏉ユ鎷氨鏄滈氳繃閿洏缁欑▼搴忎腑鐨勫彉閲璧嬪鈥濄傝鍑芥暟鐨勫師鍨嬩负锛歩nclude...
  • c璇█涓gets鍑芥暟鍜屾槸scanf鍑芥暟鏈変粈涔堝尯鍒憿??
    绛旓細1 鎿嶄綔绫诲瀷涓嶅悓銆gets鍑芥暟浠呯敤浜庤鍏ュ瓧绗︿覆銆scanf涓烘牸寮忓寲杈撳嚭鍑芥暟锛屽彲浠ヨ鍏ヤ换鎰C璇█鍩虹绫诲瀷鐨勫彉閲忓硷紝鑰屼笉鏄粎闄愪簬瀛楃涓(char*)绫诲瀷銆2 鎴瀛楃涓嶅悓銆俫ets鍑芥暟鍥哄畾鐨勪互鎹㈣绗︿綔涓虹粨灏撅紝閬囧埌鎹㈣绗︽椂缁撴潫杈撳叆銆俿canf鍑芥暟榛樿浠ョ┖鐧藉嚱鏁扮粨灏撅紝鍚屾椂鍙互瀵规埅姝㈠嚱鏁拌繘琛屼慨鏀广3 瀵规埅姝㈠瓧绗﹀鐞嗕笉鍚屻俫ets...
  • 杩欓亾c璇█鎬庝箞鍋,瑙f瀽鐪嬩笉鎳,璋佽兘璇︾粏璇翠竴涓
    绛旓細2銆gets锛堬級鍑芥暟鐨勭敤娉鍜宻canf绫讳技锛岄兘鏄璧嬪銆俫ets(A)鐨勬剰鎬濇槸鎶婃暣涓瓧绗︿覆璧嬪肩粰A锛屽張鍥犱负鍓嶉潰灏咶ig flower is red 鐨勫墠涓冧綅璧嬪肩粰浜哹锛屾墍浠ヤ粠绗叓浣嶅紑濮嬭祴鍊:wer绌烘牸is绌烘牸red.3銆佹墍浠ョ瓟妗堝氨鏄細A Fig flower is red.The sky is blue.ps锛氬彟澶栨垜瑙夊緱杩欓亾棰樻湁閿欐墠瀵癸紝鍥犱负鍓嶉潰骞舵病鏈夊畾涔夎繃...
  • c璇█涓gets鍑芥暟鍜屾槸scanf鍑芥暟鏈変粈涔堝尯鍒憿??
    绛旓細1銆scanf锛氭槸C璇█涓殑涓涓緭鍏ュ嚱鏁般2銆gets锛氫粠鏍囧噯杈撳叆璁惧璇诲瓧绗︿覆鍑芥暟銆備簩銆佽鍙栨柟寮忎笉鍚 1銆乻canf锛氭槸鏍煎紡杈撳叆鍑芥暟锛屽嵆鎸夌敤鎴锋寚瀹氱殑鏍煎紡浠庨敭鐩樹笂鎶婃暟鎹緭鍏ュ埌鎸囧畾鐨勫彉閲忎箣涓2銆乬ets锛氬彲浠ユ棤闄愯鍙栵紝涓嶄細鍒ゆ柇涓婇檺锛屼互鍥炶溅缁撴潫璇诲彇锛屾墍浠ョ▼搴忓憳搴旇纭繚buffer鐨勭┖闂磋冻澶熷ぇ锛屼互渚垮湪鎵ц璇绘搷浣滄椂涓...
  • c璇█scanf鍑芥暟鍜gets()闂,濡傚浘
    绛旓細棣栧厛锛岃璇scanf鍑芥暟鍜実ets()鐨勫尯鍒1銆乻canf鍑芥暟閬囧埌绌烘牸鏃跺垯杈撳叆缁撴潫銆備篃灏辨槸璇翠綘杈撳叆鐨凥ow are you?锛屽叾涓涓涓崟璇嶇粰浜哹[20]锛屽墿涓嬬殑鍏ㄩ儴缁欎簡c[20]銆 2銆乬ets鍑芥暟鐨勪綔鐢ㄦ槸浠庣粓绔緭鍏ヤ竴涓瓧绗︿覆鍒板瓧绗︽暟缁勩
  • c璇█涓,杈撳叆涓涓瓧绗︿覆浣跨敤scanf(鈥%s鈥)鍜gets()鏈変粈涔堝尯鍒
    绛旓細鍏跺疄鐢scanf("%s",);鍜gets();鏈川涓婃病鏈変粈涔堝尯鍒紝閮芥槸灏嗗瓧绗︽暟鎹緭鍏ュ埌鍒跺畾鐨勫唴瀛樺崟鍏冧腑銆傚亣璁惧畾涔夋湁瀛楃鏁扮粍锛C璇█鎶婂瓧绗︿覆鎸夊瓧绗︽暟缁勫鐞嗭級str[30]锛岄偅涔堟垜浠悜閲岄潰杈撳叆瀛楃灏卞彲浠ヤ负锛歴canf("%s",str);gets(str);浠栦滑閮藉彲浠ヨ繖鏍疯緭鍑猴細printf("%s",str);鎴栬卲uts(str);娉ㄦ剰锛(1)浣跨敤scanf...
  • c璇█涓scanf鐨勭敤娉
    绛旓細c璇█涓scanf鐨勭敤娉曟槸鎬庢牱鐨勶紵璁╂垜浠竴璧蜂簡瑙d竴涓嬪惂锛乻canf 鐨勫姛鑳界敤涓鍙ヨ瘽鏉ユ鎷氨鏄滈氳繃閿洏缁欑▼搴忎腑鐨勫彉閲璧嬪鈥濓紝瀹冮氬父鏈変袱绉嶇敤娉曘1銆 scanf(杈撳叆鎺у埗绗, 杈撳叆鍙傛暟);鍔熻兘锛氬皢浠庨敭鐩樿緭鍏ョ殑瀛楃杞寲涓衡滆緭鍏ユ帶鍒剁鈥濇墍瑙勫畾鏍煎紡鐨勬暟鎹紝鐒跺悗瀛樺叆浠ヨ緭鍏ュ弬鏁扮殑鍊间负鍦板潃鐨勫彉閲忎腑銆2銆乻canf(杈撳叆鎺у埗...
  • 璇烽棶鍦C璇█涓 gets scanf getchar鏄瓑浠风殑鍚
    绛旓細2.gets(s)涓娆″彧鑳借緭鍏ヤ竴涓瓧绗︿覆锛屼絾瀹冨彲浠ユ帴鍙楃┖鏍煎拰TAB鍋氫负瀛楃涓茬殑鏈夋晥瀛楃锛岄亣鍥炶溅绗︾粓姝㈡帴鏀躲3.getchar鍑芥暟鏄瓧绗﹀嚱鏁帮紝鍙兘鐢ㄦ潵鎺ュ彈1涓瓧绗︼紝鍙互鐢╟h=getchar()鏉ョ粰char鍨嬪彉閲廲h璧嬩簬涓涓瓧绗﹀瀷鐨勫笺傝繖閲岄』瑕佹敞鎰忕殑鏄C璇█涓瓧绗﹀彉閲忎笌瀛楃涓茬殑涓嶅悓锛屽瓧绗﹀彉閲忕敤char鏉ュ畾涔夛紝鍗1涓瓧鑺傜殑鍐呭瓨...
  • 扩展阅读:sst ... visual studio scanf报错 ... scanf gets getchar ... c语言scanf读入多个数字 ... putchar ... c语言scanf输入汉字 ... 5个例子搞懂scanf ... c语言scanf后面接gets ... c语言scanf正确用法 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网