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最大值 美...