回覆列表
  • 1 # 南風微涼北島梔子花的

    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佔

  • 中秋節和大豐收的關聯?
  • 相親時,男方要和女方AA制,你怎麼看?