回顾一下C语言string.h'
中为我们提供的一些库函数
strlen
函数原型
size_t strlen(const char* str);
/*strlen与sizeof的区别*/
void main(void) {
char str1[20] = "hello";
char *str2 = "hello";
printf("%d\n", sizeof(str1));
printf("%d\n", sizeof(*str1));
printf("%d\n",sizeof(str2));
printf("%d\n",strlen(str1));
printf("%d\n",strlen(str2));
printf("%d\n", sizeof(int));
system("pause");
}
运行结果
特点:
- sizeof是个关键字,strlen为库函数
- sizeof计算的是数据内存空间占有大小,strlen计算的字符个数
sizeof(str2)
计算的是这个str2这个指针所占有空间的大小,在32位系统上,不管指针p指向的是整型数据,还是字符型数据,short型数据,long型数据等,指针本身所占的内存字节数均为4。64位下为8字节。
strcpy
函数原型
char *strcpy(char *dest, const char *src)
char *strncpy(char *dest, const char *src, size_t n)
void main(void) {
char Buffer[100] = "aaaaaaaaaaaaaaaaaaaaaa";
char buffer[100] = "bbbbbbbbbb";
/*strcpy会复制‘\0’*/
strcpy(Buffer,"hello worid");
printf("%s\r\n", Buffer);
/*strcpy不会复制‘\0’*/
strncpy(buffer, "hello",5);
printf("%s\r\n", buffer);
/*当n大于要被复制字符串的字符个数时,会在多余位置添加‘\0’*/
strncpy(buffer, "hello", 8);
for(int i=0;i<10;i++){
printf("%d ", buffer[i]);
}
system("pause");
}
运行结果
特点
- strcpy复制时会将被复制的字符串尾的
'\0'
一同复制过来,而strncpy不会 - strncopy在复制时,如果n大于要被复制字符串的字符个数,会在多余的位置添加
'\0'
。多余位置数:n-strlen(src)
。 - 两者函数返回均为dest的地址
strcat
函数原型
char *strcat(char *dest, const char *src);;
char *strncat(char *dest, const char *src, size_t n);
/*strcat与strncat的区别*/
void main(void) {
char buffer[20] = "aaaaaaa";
char Buffer[20] = "aaa\0aaa";
strcat(buffer,"hello");
strcat(Buffer,"hello");
printf("%s\r\n",buffer);
printf("%s\r\n",Buffer);
strncat(buffer,"hell0",3);
printf("%s\r\n", buffer);
strncat(Buffer, "hell0", 6);
printf("%s\r\n", Buffer);
system("pause");
}
运行结果
特点
- strcat与strncat都是将src字符串追加到dest字符串的
'\0'
处,并替换掉这里'\0'
- 当n大于src中字符个数时,则只将 src 字符串追加到 dest 指向的字符串的后面