strlen函式的原理你都搞錯了,其原型應該是這樣的:intstrlen(char*);它接受的是一個char*型別的引數,真不曉得你的這個是怎麼傳遞進去的。strlen計算字串的長度例如"abc"的長度是3.但是實際上如果將其放到字元陣列中的話,應該佔4個元素。因為字串是以字元"\0"結尾的,但是這個"\0"在我們的字串是隱藏的,我們看不到。實際上是有的.例如:
chara[4]="abc";//這裡陣列的元素個數至少應該是4,否則此字串不叫字串了,只能叫字元陣列了。
strlen判斷一個字串的結束就是以其末尾的"\0"為界限。其實現程式碼可以模擬為以下:
intstrlen(char*p)
{
inti=0;
while(*p++)i++;
returni;
}
而你的陣列沒有正常的終止條件,所以strlen出問題了,
#include
voidmain()
charx[3]={0};
x[0]="a";
x[1]="b";
x[2]="c";
intlen=strlen(x);
printf("%c%d\r\n",x[6],len);
把程式碼改成這樣,就可以看出在執行strlen的時候,x的內容變了,具體原理參考原始碼
你在用右鍵檢視定義就可以找到了,
在vc98\include\string.h檔案裡有
size_t__cdeclstrlen(constchar*);
你要注意一下,strlen是標準c庫函式,不是c++的庫函式,
你可以在strlen前面發現有,
extern"c"{
這表明括號裡面的是c語言寫的函式
你的程式裡char佔
strlen函式的原理你都搞錯了,其原型應該是這樣的:intstrlen(char*);它接受的是一個char*型別的引數,真不曉得你的這個是怎麼傳遞進去的。strlen計算字串的長度例如"abc"的長度是3.但是實際上如果將其放到字元陣列中的話,應該佔4個元素。因為字串是以字元"\0"結尾的,但是這個"\0"在我們的字串是隱藏的,我們看不到。實際上是有的.例如:
chara[4]="abc";//這裡陣列的元素個數至少應該是4,否則此字串不叫字串了,只能叫字元陣列了。
strlen判斷一個字串的結束就是以其末尾的"\0"為界限。其實現程式碼可以模擬為以下:
intstrlen(char*p)
{
inti=0;
while(*p++)i++;
returni;
}
而你的陣列沒有正常的終止條件,所以strlen出問題了,
#include
#include
voidmain()
{
charx[3]={0};
x[0]="a";
x[1]="b";
x[2]="c";
intlen=strlen(x);
printf("%c%d\r\n",x[6],len);
}
把程式碼改成這樣,就可以看出在執行strlen的時候,x的內容變了,具體原理參考原始碼
你在用右鍵檢視定義就可以找到了,
在vc98\include\string.h檔案裡有
size_t__cdeclstrlen(constchar*);
你要注意一下,strlen是標準c庫函式,不是c++的庫函式,
你可以在strlen前面發現有,
extern"c"{
這表明括號裡面的是c語言寫的函式
你的程式裡char佔