呵呵,问一个C语言里字符串长度的问题。 C语言求字符串长度的问题
c\u8bed\u8a00\u4e2d\u5173\u4e8e\u5b57\u7b26\u4e32\u957f\u5ea6\u7684\u95ee\u9898\u4e0d\uff0c\u82e5\u4e0d\u5728[]\u586b\u6570\u5b57\uff0c\u5c31\u5fc5\u987b\u5728\u521d\u59cb\u5316\u8fd9\u4e2astr\uff0c\u5728\u7b49\u53f7\u53f3\u8fb9\u5199\u5177\u4f53\u6570\u636e\uff0c\u6709\u51e0\u4e2a\u6570\u636e\uff0c\u7f16\u8bd1\u5668\u5c31\u81ea\u52a8\u5728[]\u4e2d\u586b\u51e0\u4e86\u3002\u6240\u4ee5char str[]{0}\u8fd9\u6837\u5199\u662f\u9519\u8bef\u7684\uff0c\u8981\u5199\u6210char str[]={'a','b','c'};\u8fd9\u6837\u7684\u5f62\u5f0f\uff0c\u7f16\u8bd1\u5668\u5c31\u4f1a\u8ba4\u4e3a[]\u4e2d\u662f3\u4e86\u3002\u53e6\uff0cchar\u578b\u6570\u7ec4\u8fd8\u53ef\u4ee5char str[]="1234567";\u8fd9\u6837\u6765\u5b9a\u4e49\uff0c\u4f46\u8fd9\u65f6[]\u4e2d\u5e76\u4e0d\u662f7\u800c\u662f8\uff0c\u539f\u6765\u7f16\u8bd1\u5668\u628astr\u4f5c\u4e3a\u5b57\u7b26\u4e32\u5bf9\u5f85\u4e86\uff0c\u8981\u57287\u540e\u81ea\u52a8\u52a0\u4e00\u4e2a\u7ed3\u675f\u7b26'\0'\u3002
\u4f60\u7684\u4ee3\u7801\u51fa\u73b0\u95ee\u9898\u7684\u539f\u56e0\u662fscanf("%s",&a); ,a\u662f\u4e00\u4e2achar\u7c7b\u578b\u7684\u53d8\u91cf,\u7cfb\u7edf\u4e3a\u5b83\u5206\u914d\u4e86\u4e00\u4e2a\u5b57\u8282\u7684\u5185\u5b58\u7a7a\u95f4,\u4f46\u662f\u4f60\u5374\u8f93\u5165\u4e86\u4e00\u4e2a\u5b57\u7b26\u4e32\u5230\u4ee5a\u7684\u5730\u5740\u4e3a\u9996\u5730\u5740\u7684\u4e00\u6bb5\u8fde\u7eed\u7684\u5185\u5b58\u7a7a\u95f4\u91cc,\u8fd9\u6837\u5c31\u51fa\u73b0\u4e86\u8d8a\u754c\u9519\u8bef.\u4f46\u662fprintf\u51fd\u6570\u5e76\u4e0d\u68c0\u67e5\u8d8a\u754c\u9519\u8bef,\u5b83\u4f1a\u6309\u6b63\u5e38\u7684\u65b9\u6cd5\u6267\u884c,\u7136\u540e\u7a0b\u5e8f\u7edf\u8ba1\u51fa\u957f\u5ea6,\u6253\u5370\u51fa\u6765\u7ed3\u679c.\u4f46\u662f\u8fd4\u56de\u5230\u8c03\u7528main\u51fd\u6570\u7684\u64cd\u4f5c\u7cfb\u7edf\u540e,\u7cfb\u7edf\u4f1a\u53d1\u73b0\u8d8a\u754c\u9519\u8bef,\u6240\u4ee5\u5728\u7ed3\u679c\u663e\u793a\u51fa\u6765\u540e\u624d\u51fa\u9519.\u81f3\u4e8e\u4f60\u8bf4\u7684\u8f93\u51655\u4e2a\u4ee5\u4e0b\u4e0d\u4f1a\u51fa\u9519,\u4e5f\u8bb8\u662f\u5076\u7136,\u4e5f\u8bb8\u8ddf\u4f60\u7684\u7f16\u8bd1\u5668\u6709\u5173.\u6211\u7528VS2005\u6d4b\u8bd5,\u53ea\u8981\u8f93\u5165\u5c31\u4f1a\u51fa\u9519\u3002
\u5982\u679c\u4f60\u662f\u53ea\u60f3\u6c42\u51fa\u8f93\u5165\u7684\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\u800c\u4e0d\u8981\u6c42\u4fdd\u5b58\u8f93\u5165\u7684\u5b57\u7b26\u4e32\uff0c\u4e0b\u9762\u7684\u4ee3\u7801\u66f4\u597d\u3002\u4f60\u7684\u6807\u51c6\u8f93\u5165\u7f13\u51b2\u533a\u6709\u591a\u5927\uff0c\u90a3\u4e48\u5b83\u5c31\u53ef\u4ee5\u6c42\u51fa\u591a\u957f\u7684\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\uff0c\u4e0d\u4f1a\u6709\u8d8a\u754c\u3002
#include
int main()
{
int len=0;
//getchar()\u51fd\u6570\u4ece\u6807\u51c6\u8f93\u5165\u8bbe\u5907(\u5373\u952e\u76d8)\u63a5\u6536\u4e00\u4e2a\u5b57\u7b26,\u8fd4\u56de\u8be5\u5b57\u7b26\u7684ASCII\u7801.\u56e0\u4e3a\u56de\u8f66\u88ab\u8f93\u5165\u65f6\u88ab\u8f6c\u6362\u6210\u6362\u884c\u7b26(LF,ASCII\u7801\u4e3a10),\u6240\u4ee5getchar()\u8fd4\u56de10\u65f6\u5c31\u77e5\u9053\u8f93\u5165\u7ed3\u675f\u4e86.
while(getchar()!=10) len++;
printf("It's length is %d.\n",len);
return 0;
}
字符串长度 从 字符串开始计算,遇到 字符串结束符 结束,结束符 不算在 字符串 长度里。
一对 单引号 括起的 是 一个 “字符常量”, 占 1个字节长度。
用反斜杠开始的字符叫 转意/转义 字符。
\" 表示1个双引号字符。
1 表示字符 1
\43 表示 是 8 进制数 043 对应 的 ASCII 字符
\n 是 新行符 (new-line 或 line-feed)
\x11 表示 是 16 进制数 0x11 对应 的 ASCII 字符
\' 表示1个单引号字符
字符串结束符是 '\0'
什么叫 转意/转义 字符,为何要用到 转义 字符,等等,你需要看书学习才懂。
字符串的定义:以0值结尾的若干个字符,字符串的长度是数组中0值之前的字符数。
比如:字符串"1234"的具体存放在数组中是这样的:'1','2','3','4',0,由于0前面有4个字符,这个字符串长度为4,但必须占用5个位置才能存放。
所谓转义符号是这样的:c语言要用一些符号写程序,比如:printf("%d",x);这里的双引号用于表示"%d"这个字符串了,但我们如果需要输出双引号怎么办?就用\"代替写",比如我们要输出["abc"],可写:printf("[\"abc\"]");即可,同理我们要输出%号也要在字符串中用两个%代替,如输出【100%】可写x=100; printf("【%d%%】",x);
还有一些字符我们用键盘无法输入,比如回车键,在字符串中写用\n代替,\键用\\代替,只知道字符ASCII码八进制为43的可写\43,知道十六进制ASCII码11的写作\x11
这样“\"1\43\n2\x11\"”存放时为:'\"','1','\43','\n','2','\x11','\"',0字符串长度为7,最外边的一对双引号不属于存放的字符串,而是c语言标识字符串的保留符号。
第一个问题:长度的概念不是位,长度是以字节来算的,一个字节是八位。
第二个问题:因为那是转义字符,你需要查看一下转义字符就清楚了,看一下书就好,书上都有的。
绛旓細瀛楃涓查暱搴鍗曚綅鏄瓧鑺備釜鏁般傚瓧绗︿覆闀垮害 浠 瀛楃涓插紑濮嬭绠楋紝閬囧埌 瀛楃涓茬粨鏉熺 缁撴潫锛岀粨鏉熺 涓嶇畻鍦 瀛楃涓 闀垮害閲屻備竴瀵 鍗曞紩鍙 鎷捣鐨 鏄 涓涓 鈥滃瓧绗﹀父閲忊濓紝 鍗 1涓瀛楄妭闀垮害銆傜敤鍙嶆枩鏉犲紑濮鐨勫瓧绗鍙 杞剰/杞箟 瀛楃銆俓" 琛ㄧず1涓弻寮曞彿瀛楃銆1 琛ㄧず瀛楃 1 \43 琛ㄧず 鏄 8 杩涘埗鏁 ...
绛旓細鏂规硶涓锛氬埄鐢ㄥ唴缃嚱鏁皊trlen</ strlen鏄疌璇█涓殑寮哄ぇ宸ュ叿锛屽畠鑳界洿鎺ヨ繑鍥炲瓧绗︿覆鐨勯暱搴︼紝鏃犻渶澶嶆潅鐨勪唬鐮佸疄鐜帮紝鐩存帴璋冪敤鍗冲彲銆傚彧闇涓琛岀畝娲佺殑浠g爜锛屽锛歩nt len = strlen("your_string");鏂规硶浜岋細鑷畾涔夊嚱鏁板疄鐜</ 濡傛灉浣犳兂瑕佷翰鎵嬫墦閫狅紝鍙互灏濊瘯缂栧啓涓涓嚜瀹氫箟鍑芥暟my-strlen銆傞氳繃涓涓鏁板櫒count锛岄亶鍘...
绛旓細C璇█锛瀛楃涓插父閲忊漒t\鈥漬ame\\address\n鈥濈殑闀垮害涓15銆俿trlen(hello word)锛氬瓧绗︿覆涓衡渉ello word鈥濊繖绉嶅瓧绗︿覆甯搁噺锛岀郴缁熶細鍦ㄥ叾鍚庤嚜鍔ㄨˉ涓'\0'锛涗絾鏄眰瀛楃涓查暱搴鐨勫嚱鏁皊trlen()鍙閬囪'\0'锛屽氨浼氳繑鍥炲嚱鏁板硷紝'\0'涓嶇畻鍦ㄥ叾涓傛墍浠ヨ繑鍥炲间负10锛堢┖鏍间篃绠涓涓瀛楃锛夈俿trlen(hello\0world)锛...
绛旓細鍦C璇█涓紝璁$畻瀛楃涓查暱搴︽湁澶氱鏂规硶锛屽寘鎷嚜瀹氫箟鍑芥暟銆佷娇鐢ㄥ唴缃簱鍑芥暟浠ュ強鍒╃敤sizeof()鎿嶄綔绗︺備互涓嬫槸鍏蜂綋姝ラ鐨勮缁嗚В鏋愶細棣栧厛锛屽鏋滀綘鎯冲疄鐜拌嚜瀹氫箟鍑芥暟鏉ユ眰瀛楃涓查暱搴︼紝鍙互鍒涘缓涓涓鍚嶄负cont_str鐨勫嚱鏁帮紝濡備笅鎵绀猴細int cont_str(char *s){ int len = 0;while (s[len++] != '\0');return...
绛旓細鍩烘湰鏉′欢鏄┖瀛楃涓茬殑闀垮害涓0銆備唬鐮佸涓嬫墍绀猴細鏈鍚庯紝鍒╃敤鎸囬拡鐨勭壒鎬э紝閫氳繃涓や釜鎸囬拡鐩稿噺璁$畻鍏冪礌涓暟锛屼篃鑳藉緱鍒板瓧绗︿覆闀垮害銆傝繖绉嶆柟娉曠畝娲佺洿瑙傦紝浣嗛渶瑕佸鎸囬拡鎿嶄綔鏈夋繁鍏ョ悊瑙c備互涓婂氨鏄洓绉C璇█姹瀛楃涓查暱搴︾殑鏂规硶锛屽笇鏈涘浣犳湁鎵甯姪銆傚鏋滀綘瀵瑰叾涓换浣曚竴绉嶆劅鍏磋叮锛岃寰楁敹钘忓拰瀛︿範鍝︼紒
绛旓細C璇█4绉瀛楃涓查暱搴楂樻晥鏂规硶 鏂规硶涓: 璋冪敤鍐呯疆鍑芥暟strlen姹傚瓧绗︿覆闀垮害 鏂规硶浜: 鍒涘缓涓存椂鍙橀噺璁$畻瀛楃涓查暱搴 棣栧厛锛屾垜浠嚜瀹氫箟鍑芥暟my_strlen姹傚瓧绗︿覆闀垮害鍦╩y_strlen涓敤count缁熻瀛楃鐨涓暟锛屾垜浠紶鍏ョ殑char绫诲瀷鐨勬寚閽坰tr锛屽浠栬繘琛岃В寮曠敤(*str)寰楀埌str鎸囧悜鐨勫硷紝寰幆鍒ゆ柇(*str)鏄惁绛変簬鈥10鈥,濡傛灉涓嶇瓑...
绛旓細杩欐槸鐢 C 璇█缂栧啓鐨勭▼搴忥紝鍙互璁$畻瀛楃涓茬殑闀垮害锛氬湪杩欐浠g爜涓紝鎴戜滑瀹氫箟浜涓涓鍑芥暟 string_length锛岀敤浜庤绠楀瓧绗︿覆鐨勯暱搴︺傚嚱鏁版帴鍙椾竴涓弬鏁 string锛岃〃绀鸿璁$畻闀垮害鐨勫瓧绗︿覆銆傚湪鍑芥暟鍐呴儴锛屾垜浠娇鐢 C 璇█鐨鍐呯疆鍑芥暟 strlen 鏉ヨ绠楀瓧绗︿覆鐨闀垮害锛骞惰繑鍥炵粨鏋溿傚湪 main 鍑芥暟涓紝鎴戜滑瀹氫箟浜嗕竴涓瓧绗︿覆...
绛旓細閬囧埌'\0'缁撴潫锛屼箣鍚庣殑灏变笉缁熻浜嗭紝骞朵笖杩欎釜闀垮害涓嶅寘鍚'\0'銆傛墍浠ユ暟涓鏁拌繖涓瓧绗︿覆鍗13涓瓧鑺傦紝杩欎釜瀛楃涓茬殑闀垮害鏄12銆🔤杞箟瀛楃涓涓姹夊瓧瀛楃鍗犵敤涓や釜瀛楄妭锛孿065,\t,\n鏄浆涔夊瓧绗︼紝鍗犱竴涓瓧鑺锛屽瓧绗︿覆淇濆瓨鏃舵湯灏惧涓涓'\0'琛ㄧず瀛楃涓茬殑缁撴潫锛屽崰涓涓瓧鑺傘
绛旓細杩欎釜瀛楃涓查暱搴︿负10涓瓧绗︺傚彲浠ョ敤strlen("ab'1'\\\12803")鏉ユ眰杩欎釜瀛楃涓茬殑闀垮害銆備篃鍙互鐢╯izeof("ab'1'\\\12803")鏉ユ眰锛屼絾鏄繖涓眰鍑虹殑缁撴灉鏄浜涓涓瀛楃涓茬粨鏉熺\0銆傚彲浠ヨ瘯鐫杈撳嚭杩欎釜瀛楃涓茬湅鐪嬫槸涓嶆槸10涓瓧绗︺俿trlen()鍑芥暟鍒ゆ柇鐨勫瓧绗︿覆闀垮害鏄互\0涓虹粨灏句綔涓烘爣蹇楃殑銆傚綋char * m=new ...
绛旓細鑾峰緱瀛楃涓茬殑闀垮害锛屼互璇ラ暱搴﹀-1浣滀负璧风偣锛屼互0浣滀负缁堢偣锛屽惊鐜緭鍑哄瓧绗︺傛敞鎰忥細鑾峰緱瀛楃涓查暱搴鍙互鐢<string.h>搴撶殑strlen()鍑芥暟锛岃鍑芥暟杩斿洖瀛楃涓茬殑瀹為檯闀垮害锛屽叾涓笉鍖呭惈绌哄瓧绗︺傛祴璇曚唬鐮 娴嬭瘯浠g爜锛歩nclude <stdio.h> include <string.h> int main(){ char a[100] = {0};gets(a);int len =...