strlenとstrcpy関数の実現の浅い話とsizeof演算子とstrlen関数の違いを分析する


</pre><pre name="code" class="cpp">#include<stdio.h>
#include<string.h>

/*
strlen              ,         (        ,      ,             )    
,             '\0'  ,        。

sizeof C/C++       (operator),                           。
strlen sizeof   :
 strlen(char*)             ,               '\0',             ,        ,   aa        ,    '\0'  。

  char aa[10];cout<<strlen(aa)<<endl; //      

  char aa[10]={'\0'}; cout<<strlen(aa)<<endl; //   0

  char aa[10]="jun"; cout<<strlen(aa)<<endl; //   3

   sizeof()               ,      ,  sizeof    ,        ,strlen   。

  sizeof(aa)   10

  int a[10]; sizeof(a)   40

  1.sizeof         size_t,      typedef unsigned int  。

                         。

  2.sizeof    (   ),strlen   。

  3.sizeof        ,strlen   char*   ,     ''\0''   。

  sizeof         ,  :

  short f();

  printf("%d
", sizeof(f()));    sizeof(short), 2。   4. sizeof , strlen 。   5. sizeof sizeof(x)   char str[20]="0123456789";   int a=strlen(str); //a=10;   int b=sizeof(str); // b=20;   6.strlen , , 。   7.sizeof , 。 sizeof 。   8. , sizeof ,    , sizeof 。   sizeof   9. , ,    :   fun(char [8])   fun(char [])    fun(char *)    C++ ,    , :    memcpy ,   fun(unsiged char *p1, int len)   {   unsigned char* buf = new unsigned char[len+1]   memcpy(buf, p1, len);   }    sizeof strlen ,    , , :   char str[20]="0123456789";   int a=strlen(str); //a=10; >>>> strlen , 0x00 。   int b=sizeof(str); // b=20; >>>> sizeof str[20] , 。    , ,   char* ss = "0123456789";   sizeof(ss) 4 ===》ss ,sizeof ,    , 4   sizeof(*ss) 1 ===》*ss '0' , char    , 1   strlen(ss)= 10 >>>> , strlen   sizeof . //   strlen . //    sizeof , , ,   char Array[3] = {'0'};   sizeof(Array) == 3;   char *p = Array;   sizeof(p) == 1;//sizeof(p) 4    , : char* ss = “0123456789”; sizeof(ss); 4,ss char sizeof(*ss); 1,*ss char ss[ ] = "0123456789"; sizeof(ss); 11,ss , "\0" , 10+1=11 sizeof(*ss); 1,*ss char ss[100] = "0123456789"; sizeof(ss); 100,ss ,100*1 strlen(ss); 10, , “\0”, ( \0) int ss[100] = "0123456789"; sizeof(ss); 400,ss ,100*4 strlen(ss); ,strlen char *, \0 strlen strcpy */ int mystrlen(const char *s) { // const char *sc; /* sc sc 1. ‘\0’, , for 2. , 3. , ‘\0’ , , , for */ for (sc = s; *sc != '\0'; ++sc); // s sc - c return sc - s; } /* : , : : , src dest , dest */ char *mystrcpy(char *dest, const char *src) { // , dest char *tmp = dest; /* while , (*dest++ = *src++) : , , *dest = *src;( : * , 。 src dest ) dest = dest + 1; src = src + 1; */ while ((*dest++ = *src++) != '\0'); // , :dest return tmp; } int main(){ char* str = "abcd"; int count = 0; char* dest = new char[strlen(str) + 1]; mystrcpy(dest,str); count = mystrlen(dest); printf("dest :%s
",dest); printf(" :%d
", count); }