C语言关于strlen()函数的问题 C语言中strlen()函数的意思?

C\u8bed\u8a00\u4e2d strlen\u51fd\u6570\u7528\u6cd5\u7684\u95ee\u9898

printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(sumame), strlen(sumame));
\u8fd9\u4e2a\u662f\u8f93\u51fa\u5339\u914d\u7684\u95ee\u9898\u3002
\u4e3e\u4e2a\u4f8b\u5b50
printf("%5d",5); \u5c31\u4f1a\u7ed9\u4f605\u4e2a\u7a7a\u95f4\u8f93\u51fa5\uff0c\u524d\u97624\u4e2a\u7a7a\u683c\uff0c\u7136\u540e\u8f93\u51fa5.
printf("%*d",5,5);\u548c\u4e0a\u9762\u4e00\u6837\uff0c\u5229\u7528*\u5339\u914d5\u63a7\u5236\u8f93\u51fa\u5bbd\u5ea6\u3002\u5c31\u662f\u56db\u4e2a\u7a7a\u683c5.

\u540c\u7406\u4e0a\u9762\u7684\u7b2c\u4e00\u4e2astrlen\u662f\u4f5c\u4e3a\u8f93\u51fa\u5bbd\u5ea6\u800c\u5b58\u5728\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\u7ed9\u4f60\u5b57\u7b26\u4e32\u957f\u5ea6\u4e2a\u7a7a\u95f4\uff0c\u7528\u4e8e\u5b58\u653e\u5b57\u7b26\u4e32\u957f\u5ea6\u7684\u53d8\u91cf\u3002
\u6bd4\u5982\u8f93\u5165
we
women
\u5c31\u76f8\u5f53\u4e8e
printf("%*d%*d",2,2,5,5);
\u76f8\u5f53\u4e8e
printf("%2d%5d",2,5);\u8f93\u51fa \u30101\u4e2a\u7a7a\u683c\u30112\u30104\u4e2a\u7a7a\u683c\u30115

strlen()\u662f\u8bfb\u53d6\u5b57\u7b26\u4e32\u957f\u5ea6\u7684\u610f\u601d\uff0c\u4e3e\u4f8b\u5982\u4e0b
char a[]={'a','b','c'};
return strlen(a);
\u8fd4\u56de\u5b57\u7b26\u4e32a\u7684\u957f\u5ea6\uff0c\u662f3\u3002
\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cstrlen()\u51fd\u6570\u9700\u8981\u7684\u5934\u6587\u4ef6\u3002
\u5982\u6709\u7591\u95ee\u8bf7\u60a8\u8ffd\u95ee\u3002

这里遇到字符串结束符不是偶然的。对于数组,C语言规定,若没有初始化列表,则仅分配空间,对应内存区域为随机值(实际情况视编译器而定,例如Microsoft C编译器Debug模式下会用0xcc填充这些区域以便辨认);若存在初始化列表,则按初始化列表的各项的值依次填充至数组中;长度不够的,顺序初始化结束后,用0填充剩余部分。这里数组声明中长度为10,也就是a能容纳10个char变量。初始化后a的内容应该为'a','b',0,0,0,0,0,0,0,0,strlen(a)从地址a(等于&a[0],即'a'的位置)开始计算长度,到'b'之后遇到结束符&a[2]处的0停止,因此结果为&a[2]-&a[0]=2。LZ可以自行逐个输出a的各个字符元素查看'b'之后的实际内容。
====
[原创回答团]

这里计算a里,从&a[0]起始的字符串长度。

char a[10]={'a','b'}; 得2
char a[10]={'a','b','c'}; 得3
char a[10]={'a','b','c'}; a[9]='9'; 仍然得3.

字符串长度,不计字符串结束符。它与字符串占据的存放单元个数概念不同。
字符串结束符是 '\0' (或 "\0" ,同null)

char a[10]={'a','b'};
这时候数组a中的其他字符被自动初始化为‘\0'。

有兴趣的话楼主可以用一个for循环输出。

printf("%d",a[2]);//输出0,改成%c的话,输出一个空格,所以该字符即'\0',因此,slen()到这里就遇到了空白字符,因此是2
printf("%d",a[3]); //输出0,改成%c的话,输出一个空格,所以该字符即'\0'

  • C璇█涓璼trlen(s)鏄粈涔堟剰鎬?S鏄竴涓暟缁!
    绛旓細strlen(s)琛ㄧず姹傚瓧绗︿覆s鐨勯暱搴︺strlen鍑芥暟鍘熷瀷锛歩nt strlen(char *s锛;澶存枃浠讹細string.h 鏍煎紡锛strlen 锛瀛楃鏁扮粍鍚嶏級鍔熻兘锛氳绠楃粰瀹氬瓧绗︿覆鐨勶紙unsigned int鍨嬶級闀垮害锛屼笉鍖呮嫭'\0'鍦ㄥ唴 璇存槑锛氳繑鍥瀞鐨勯暱搴︼紝涓嶅寘鎷粨鏉熺NULL銆傚弬鑰冧唬鐮侊細include<string.h>#include<stdio.h>int main(){ char s...
  • C璇█涓璼trlen()鍑芥暟鍜宻izof()鍑芥暟鍒嗗埆鎬庝箞鐢?鍖哄埆鏄粈涔
    绛旓細鎴杝izeof (鍙橀噺鍚)姣斿璇存湁浠ヤ笅鏁版嵁绫诲瀷锛歩nt arr[10],a;char str="hello world";sizeof(arr)/sizeof(a)/sizeof(str)閮芥槸鍙互鐨勶紝浣嗘槸鍙兘浣跨敤strlen(str),鑰屼笉鑳絪trlen(arr);2銆佸尯鍒細2.1 sizeof()鏄C璇█涓鍒ゆ柇鏁版嵁绫诲瀷鎴栬呰〃杈惧紡闀垮害绗︼紱涓嶆槸涓涓鍑芥暟锛屽瓧鑺傛暟鐨勮绠楀湪绋嬪簭缂栬瘧鏃惰繘琛岋紝...
  • C璇█printf()杈撳嚭鐨勬槸浠涔?
    绛旓細printf鍑芥暟杈撳嚭strlen()鍑芥暟鎵ц鐨勭粨鏋滐紝strlen()璁$畻瀛楃涓"\t\"\065\xff\n"鐨勫瓧绗︿釜鏁帮紝璇ュ瓧绗︿覆涓湁5涓厓绱狅紝鎵浠ヤ細杈撳嚭5锛5涓厓绱犲垎鍒槸锛1銆乗t锛氭崲鐮佺'\t',琛ㄧず姘村钩鍒惰〃浣嶏紙horizeontal tab锛夈2銆乗" :鍙屽紩鍙 3銆乗065:瀛楃\鍚庨潰鐨勬暟瀛065鏄笁涓叓杩涘埗鏁帮紝瀹冩槸鏁板瓧5鐨凙SCII鐮佸 4...
  • 鍏充簬C璇█鐨.strlen(a[1])鏄粈涔堟剰鎬,鐢ㄥ鏄粈涔?
    绛旓細strlen(瀛楃鏁扮)strlen鏄疭TRing LENgth(瀛楃涓查暱搴)鐨勭缉鍐欍傚畠鏄祴璇曞瓧绗︿覆闀垮害鐨鍑芥暟銆傚嚱鏁扮殑鍊间负瀛楃涓蹭腑鐨勫疄闄呴暱搴︼紙涓嶅寘鎷'\0'鍦ㄥ唴锛夈備緥濡傦細char str[10]={"china"};printf("%d",strlen(str));杈撳嚭鐨勭粨鏋滀笉鏄10锛屼篃涓嶆槸6锛岃屾槸5銆備篃鍙洿鎺ユ祴璇曞瓧绗︿覆甯搁噺鐨勯暱搴︼紝渚嬪 strlen锛"china"锛...
  • C璇█璁$畻瀛楃涓查暱搴︾殑鍑犵鏂规硶
    绛旓細C璇█璁$畻瀛楃涓查暱搴︼紝鍙互鎵嬪姩璁$畻涔熷彲浠ヤ娇鐢ㄥ簱鍑芥暟鎴栬卻izeof()鎿嶄綔绗︺傛柟娉曪細鑷畾涔夊嚱鏁版眰闀垮害 浣跨敤strlen()鍑芥暟 浣跨敤sizeof()鎿嶄綔绗 鑷畾涔夊嚱鏁帮細int cont_str(char *s){ int i = 0;while ( str[i++] 锛= '\0') ;return i;} 浣跨敤string澶存枃浠朵腑鐨剆trlen()鍑芥暟锛歴trlen(str); //...
  • c璇█strlen鍑芥暟闂
    绛旓細鍒嗘瀽濡備笅锛1銆strlen瀹為檯涓婃槸锛屼粠鍙傛暟琛ㄧず鐨勫湴鍧寰鍚庢壘锛屾壘鍒扮涓涓'\0'锛屽嵆涓插熬銆傜劧鍚庤绠'\0'鑷抽鍦板潃鐨勨滆窛绂烩濓紝鍗抽殧浜嗗嚑涓瓧绗︼紝浠庤屽緱鍑洪暱搴︺2銆乧har x[]={0xBC,0xDD,0xCA};涓紝瀹為檯涓婃槸瀹氫箟浜嗕竴涓猚har鍨嬬殑鏁扮粍锛岃岀敱浜巟[0]锛屽嵆0xBC寮濮嬪線鍚庢壘锛屼竴鐩村埌0xCA锛岄兘娌'\0'锛屾墍浠ヤ細...
  • C璇█涓sizeof鍜strlen鍑藉紡鍖哄埆鍦ㄥ摢?
    绛旓細缂栬瘧鍣ㄤ笉鐭ラ亾闃靛垪鐨勫ぇ灏 濡傛灉鎯冲湪鍑藉紡鍐呯煡閬撻樀鍒楃殑澶у皬锛 闇瑕佽繖鏍峰仛锛 杩涘叆鍑藉紡鍚庣敤memcpy鎷疯礉鍑烘潵锛岄暱搴︾敱鍙︿竴涓舰鍙備紶杩涘幓 fun(unsiged char *p1, int len) { unsigned char* buf = new unsigned char[len+1] memcpy(buf, p1, len); }C璇█涓叧浜sizeof 鍜 strlen鐨勫尯鍒垎鏋 ...
  • C璇█瀹炵幇strlen鍑芥暟鐨勫嚑绉嶆柟娉
    绛旓細鍏蜂綋鍘熺悊鍙傝冩簮浠g爜 浣犲湪鐢ㄥ彸閿煡鐪嬪畾涔夊氨鍙互鎵惧埌浜嗭紝鍦╲c98\include\string.h 鏂囦欢閲屾湁 size_t __cdecl strlen(const char );浣犺娉ㄦ剰涓涓嬶紝strlen鏄爣鍑哻搴鍑芥暟锛屼笉鏄痗++鐨勫簱鍑芥暟锛屼綘鍙互鍦╯trlen鍓嶉潰鍙戠幇鏈夛紝extern "c"{ 杩欒〃鏄庢嫭鍙烽噷闈㈢殑鏄c璇█鍐欑殑鍑芥暟 浣犵殑绋嬪簭閲 char鍗 ...
  • C璇█ strlen 鍑芥暟姹傚瓧鑺傛暟 渚嬪杈撳叆鈥渉ow are you鈥 鍖呮嫭绌烘牸鍚 鐭涚浘...
    绛旓細printf("%d",strlen(s)); 鎵撳嚭 3 鏈洖绛旂敱鎻愰棶鑰呮帹鑽 涓炬姤| 绛旀绾犻敊 | 璇勮 4 7 L_o_o_n_i_e 閲囩撼鐜:57% 鎿呴暱: C/C++ VC++ 鐢佃剳/缃戠粶 鍏朵粬鍥炵瓟 鐪嬩綘杈撳叆鐨勬椂鍊欑敤鐨勬槸浠涔堣鍙ヤ簡:濡傛灉鐢ㄧ殑鏄痵canf("%s"),杩欎釜鏄互绌烘牸涓哄垎闅旂鐨,鎵浠ュ緱鍒扮殑鍙湁"how",鍐嶆眰闀垮害灏辨槸3濡傛灉鐢ㄧ殑鏄痝ets()閭...
  • strlen鍑芥暟 C璇█
    绛旓細int MyStrlen(char * str){ char * p=str;while(* p) //寰幆鍒皊tr缁撳熬鐨刓0 ++p; //杩唬鎸囬拡鍚戝悗绉诲姩 return p-str; //鐩稿浣嶇疆姹傚嚭瀛楃涓查暱搴 }
  • 扩展阅读:英转中翻译器 ... 翻译成中文 ... c语言strlen使用方法 ... strlen在c++的头文件 ... c语言strlen头文件 ... strlen a 是什么意思 ... strlen在c++中的用法 ... c语言struct用法 ... c语言中strlen函数怎么用 ...

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