sizeof strlen
sizeof函数:计算字符串占的总内存空间
char s[]=“abc\0de”;
printf(“%d”,sizeof(s));
7
strlen函数:获取字符串的长度。//遇到终结符‘\0’就会终止。
20
3
std::cout << "Sizeof\n";
char str[] = "Hello";
char* p = str;
printf("%d\n", sizeof(str)); //6
printf("%d\n", sizeof(p)); //4
printf("%d\n", sizeof(*p)); //1
sizeof ( p ) = 4; 因为 p为指针,32位系统 指针所占字节为 4个字节
sizeof ( *p ) = 1; 因为 *p 为 指针所指向的变量为char类型为 2个字节
int a[100];
sizeof (a) = 400; // 因为 a是类型为整型、有100个元素的数组,所占内存为400个字节
sizeof (a[100]) = 4; //因为 a[100] 为数组的第100元素的值该值为 int 类型,所占内存为4个字节。
sizeof (&a) = 4; //因为 &a 为数组的地址即指针,32位系统 指针所占字节为 4个字节
sizeof (&a[0]) = 4; //因为&a[0] 为数组的首元素的地址即指针,32位系统 指针所占字节为 4个字节
strcpy
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest != NULL) && (strSrc != NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ ) //直到strSrc指向\0. 验证: a[] =”abcd” b[] =”abc”
return address;
}
直接返回char *的手段,就是为了后来函数调用者方便而设计的,直接可以使用拷贝后的dest字符串了.如:
int length = strlen( strcpy( strDest, “hello world”) );
strcpy和memcpy
(1)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
(2)复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
void *memcpy(void *memTo, const void *memFrom, size_t size)