</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);
}