strlen函式,strlen函式計算字串長度

時間 2022-04-20 09:40:04

1樓:馬佳樹枝強鸞

首先要宣告,strlen(xx[i])反回的值是0,因為你的xx還沒有初值。你應該在readdat()的while迴圈中測試一下,是否讀入了資料到xx陣列中,在while中使用printf輸出xx陣列就知道了。應該是strlen反回0導至的錯誤。

因為不了解你的那個dat檔案中9近是什麼內容,因此不好判斷

程式主要錯在第乙個for語句for(j=1;j<(strlen(xx[i])-2);j=j+2)中的(strlen(xx[i])-2)這一句。

因為strlen()函式的反回型別為unsigned

int(無符號整型),因此再進行strlen(xx[i]-2的時候得到的是乙個負數-2,而unsigned

int是無法表示負數的,因此就被計算機轉換為補碼的形式來表示-2了,,也就是十進位制數的4294967292,二進位制形式是11111111110(具體多少個1自已算,反正前面全是1)

你可以把strlen(xx[i])強制轉換為int型來測試,比如(int)strlen(xx[i]-2這樣的話就能得到正確結果了。

2樓:湯靈杉

strlen函式的原理你都搞錯了,其原型應該是這樣的:int strlen(char *);它接受的是乙個char*型別的引數,真不曉得你的這個是怎麼傳遞進去的。 strlen計算字串的長度例如"abc"的長度是3.

但是實際上如果將其放到字元陣列中的話,應該佔4個元素。因為字串是以字元'\0'結尾的,但是這個'\0'在我們的字串是隱藏的,我們看不到。實際上是有的.

例如:char a[4]="abc";//這裡陣列的元素個數至少應該是4,否則此字串不叫字串了,只能叫字元陣列了。

strlen判斷乙個字串的結束就是以其末尾的'\0'為界限。其實現**可以模擬為以下:

int strlen(char *p)

所以他是不包括'\0'這個字元的。

3樓:藩飛白賴璟

1.xx[2][8]的記憶體是連續分配的

2.01234567

0dae,bfc.

1ccbbaa\0

本來在第一行最後應該是\0的,但是位置佔滿了,所以\0就到第二行了(由於記憶體的連續分配)

但是繼續向第二行寫資料的時候,c就把第一行的\0覆蓋了,到最後再加上第二的\0

而strlen只認起始字元d然後開始數,直到\0為止所以把dae,bfc.ccbbaa都數上了,數到第二行的\0結束,所以是14個

4樓:鬼龍子

int是佔兩位元組,因為是陣列,分配的是3個int所以應該是6位元組

5樓:匿名使用者

列印應該是2吧,strlen計算字元結果是不含\0的

6樓:精品建築電氣

3樓回答得不錯,參考他的吧

strlen函式計算字串長度

7樓:我本熱情

strlen()函式用來計算字串的長度,其原型為: unsigned int strlen (char *s);

引數說明:s為指定的字串。

strlen()用來計算指定的字串s 的長度,不包括結束字元」\0」。

返回值:返回字串s 的字元數。

注意一下字元陣列,例如char str…

8樓:

strlen遇到\0就結束,不繼續往下計算長度了1.答案1是因為第2個字元為\0,所以只計算了乙個字元'a'

2.答案3是因為\t、\v、\\前面的\是表示轉義符3.答案1是因為\x69表示是16進製制的數值

9樓:丨嗚呼哀哉

遇到\0就表示該字串結束,後面即使再長也都不參與計算……所以第一的長度是1,

第二個的\是轉移字元,\t表示乙個字元,後面同理;

第三個x69是16進製制數,其實還是乙個字元明白了麼?

10樓:匿名使用者

首先,你要明確:字串結束的標誌是\0。

其次,你要明白:\t,\v是轉義字元,是字元常量。

最後,你要知道:strlen( )函式的作用是測試字串長度(不包括\0)。

char s[10] = ;

當執行strlen(s)時,從起始位址s開始掃瞄,到\0時結束操作,返回乙個整型數1。

char s[ ] = "\t\v\\\0will\n";

在這個字串中\0前面有3個轉義字元\t\v\\,所以返回3。

char s[ ] = "\x69\082\n";

\x69 是乙個轉義字元,意思是十六進製制的69在ascii中所代表的字元。

11樓:向日葵

引數說明:s為指定的字串。

strlen()用來計算指定的字串s 的長度,不包括結束字元」\0」。

返回值:返回字串s 的字元數。

注意一下字元陣列,例如

edu.cn/cpp/u/biaozhunku/「; 定義了乙個大小為100的字元陣列,但是僅有開始的11個字元被初始化了,剩下的都是0,所以 sizeof(str) 等於100,strlen(str) 等於11。

strlen() 函式計算的是字串的實際長度,遇到第乙個』\0』結束。如果你只定義沒有給它賦初值,這個結果是不定的,它會從首位址一直找下去,直到遇到』\0』停止。

而sizeof返回的是變數宣告後所佔的記憶體數,不是實際長度,此外sizeof不是函式,僅僅是乙個操作符,strlen()是函式。

擴充套件資料

strlen()函式語法格式

$len = strlen(string);

引數說明

string:規定要計算的字串;$len:接收函式返回值的變數;例項:

<?php

header("content-type:text/html;charset=utf-8");//設定編碼,解決中文亂碼

$string1 = "www .ggbiji. com"; //字串1

$string2 = "國哥筆記"; //字串2

$result1 = strlen($string1); //英文本母

$result2 = strlen($string2); //中文漢字

echo "字串\"".$string1."\"的長度為:".$result1."

";echo "字串\"".$string2."\"的長度為:".$result2."";

c語言中的strlen函式

12樓:冰_vs_霰

strlen是測量字串長度的

char d=和char a="china"; char b=; 是等價的 是陣列的表示形式

而char c=;卻是字元陣列所以並不能得到結果

13樓:匿名使用者

strlen是字串長度統計函式,他不包含字串結束符「\0」;

求字元陣列長度可以用 sizeof()如你上面的問題可以用:

sizeof(c)/sizeof(c[0])

14樓:幫479題

strlen()只是統計字串的長度,統計到'\0'結束,但不包括'\0',這個與sizeof()不一樣。

對於用雙引號引起來的字串,系統預設最後一位字元為'\0',如你自己定義的:

char a="china";

char b=;

另外,陣列初始化還可以是乙個字元乙個字元賦值,如:

char c=;

char d=;

但系統不會自動給你在最末位新增'\0』

所以在統計char c=時,統計到a時,系統還沒找到\0,所以會繼續統計,直到找到'\0'為止。所以就有你第三個值為11的情況,這個根據不同的執行環境而定。

15樓:匿名使用者

strlen是求字串長度的函式。

函式原型:unsigned int strlen(char *s);

引數:s是char型別的指標,指向要求長度的字串返回值:返回字串的長度,返回型別是無符號整型注意:

strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含「\0」)。

例項:#include

#include

int main(void)

c語言strlen函式問題

16樓:勿忘心安

strlen實際上是,從引數表示的位址往後找,找到第乙個'\0',即串尾。然後計算'\0'至首位址的「距離」,即隔了幾個字元,從而得出長度。

char x=;中,實際上是定義了乙個char型的陣列,而由於x[0],即0xbc開始往後找,一直到0xca,都沒'\0',所以會繼續往後。當然,實際上往後找到的是其他值。

改char x=;後,應該就是3了。

擴充套件資料:

strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含'\0')。

函式原型

extern unsigned int strlen(char *s);

在visual c++ 6.0或dev-c++中,原型為

size_t strlen(const char *string);

,其中size_t實際上是unsigned int,在vc6.0或dev-c++中可以看到這樣的**:

typedef unsigned int size_t;

標頭檔案:string.h或cstring

格式:strlen (字元陣列名)

功能:計算給定字串的(unsigned int型)長度,不包括'\0'在內

說明:返回s的長度,不包括結束符null。

17樓:匿名使用者

strlen函式的原理你都搞錯了,其原型應該是這樣的:int strlen(char *);它接受的是乙個char*型別的引數,真不曉得你的這個是怎麼傳遞進去的。 strlen計算字串的長度例如"abc"的長度是3.

但是實際上如果將其放到字元陣列中的話,應該佔4個元素。因為字串是以字元'\0'結尾的,但是這個'\0'在我們的字串是隱藏的,我們看不到。實際上是有的.

例如:char a[4]="abc";//這裡陣列的元素個數至少應該是4,否則此字串不叫字串了,只能叫字元陣列了。

strlen判斷乙個字串的結束就是以其末尾的'\0'為界限。其實現**可以模擬為以下:

int strlen(char *p)

而你的陣列沒有正常的終止條件,所以strlen 出問題了,

#include

#include

void main()

;x[0]='a';

x[1]='b';

x[2]='c';

int len=strlen(x);

printf("%c %d \r\n",x[6],len);

}把**改成這樣,就可以看出在執行strlen的時候,x的內容變了,具體原理參考源**

你在用右鍵檢視定義就可以找到了,

在vc98\include\string.h 檔案裡有

size_t __cdecl strlen(const char *);

你要注意一下,strlen是標準c庫函式,不是c++的庫函式,

你可以在strlen前面發現有,

extern "c" {

這表明括號裡面的是c語言寫的函式

你的程式裡 char佔

c語言中strlen函式和sizof函式分別怎麼用?區

1 用法 strlen char pstr 求的是字串的實際長度 sizeof 型別說明符,陣列名或表示式 或sizeof 變數名 比如說有以下資料型別 int arr 10 a char str hello world sizeof arr sizeof a sizeof str 都是可以的,但是...

strlen 庫函式與stdio h標頭檔案問題??急著求解

stdio.h是標準輸入輸出,c語言本身不包括輸入輸出函式,如 printf,scanf等等,這些c語言本身並沒有包含這些函式,所以就要加stdio.h庫函式,裡面就有了這些輸入輸出函式的宣告 而strlen函式在包含在string.h中的,所以兩者沒有任何關係,而你所提的問題,是由於你的程式 中使...

C語言裡關於Strlen

因為由char food yummy 定義的food有5個元素,所以strlen food 5,故ptr food strlen food 就是ptr food 5而不是 4。ptr food 5使ptr指向了food 5 亦即ptr food 5 而 ptr food 5 由於陣列下標是從0開始的...

c語言sizeof和strlen的區別

區別如下 1 指代上的區別 1 sizeof 用來獲取字串長度的導引,是處理字串的重要工具。2 strlen 做的是乙個計數器。2 用法上的區別 1 sizeof sizeof type name sizeof type 在編譯時有效,而不是在執行時有效。2 strlen extern unsign...

strlen 沒有初始化的字元陣列)

黑夜不是我 看strlen的解釋就知道了 strlen用於計算字串長度,直到遇到結束符 0 停止,函式源 大體是這樣如下 size t strlen a const char str 例如宣告乙個字元陣列a 32 不進行初始化,int len strlen a 結果可能是任意數,甚至int最大值 美...