1.sizeof使用
a.代码1
int main()
{
int a = 0;
int arr[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);
printf("%d\n", sizeof(&a));//表示地址的大小
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(arr));//计算数组arr的大小(单位为字节)
printf("%d\n", sizeof(arr)/sizeof(arr[0]));//计算数组arr的空间个数
return 0;
}
解释:
(1)sizeof是计算大小的(单位为字节), sizeof后面可以跟变量,类型(跟类型时一定要将类型括起来),地址(因为是32位机器,所以地址大小为4字节,如果是64位,结果就是8字节),数组名。
(2)sizeof也可以计算数组的空间的个数。
2.strlen函数
a.代码1
int main()
{
char arr1[] = { 'a','b','c','\0'};
char arr2[] = { 'a','b','c' };
char arr3[4] = { 'a','b','c' };
char*str = "abc";
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
printf("%d\n", strlen(arr3));
printf("%d\n", strlen(str));
return 0;
}
解释:
(1)strlen函数是计算'\0'前的元素个数,此时arr1数组有4个空间,有'\0','\0'前面有3个元素。
(2)此时arr2数组有3个空间,没有'\0',所以就产生了一个随机数。
(3)此时arr3数组有4个空间,前面3个空间放的是"abc",最后一个空间系统添加了一个'\0'。
(4)指针变量指向字符串"abc"等价与"abc\0"。
注意:
(1)strlen(包括strcmp strcpy strcat等)函数是用于字符串的,而不是整型数组的。
(2)strlen函数是计算'\0'前的字符个数,即有效字符的个数。
b.代码2
int main()
{
char* str1 = "abc";
char* str2 = "abcd";
if (strlen("abc") < strlen("abcd"))
{
printf("aa\n");
}
else
{
;
}
if (strlen(str1) - strlen(str2) > 0)
{
printf("aa\n");
}
else
{
;
}
return 0;
}
解释:
(1)strlen的返回值是无符号的整型(unsigned int),所以(strlen(str1) - strlen(str2))最终的值也是无符号的,即>=0。
注意:
(1)一定要引头文件<string.h>,不然结果就只有一个"aa"
3.sizeof与strlen函数对比
a.代码1
int main()
{
char arr1[] = { 'a','b','c' };//3个空间,没有字符'\0'
char arr2[] = "abc";//4个空间,字符'c'后面默认跟一个'\0'
char arr3[] = "a\0bc";
printf("%d\n", sizeof(arr1));
printf("%d\n", sizeof(arr2));
printf("%d\n", sizeof(arr3));
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
printf("%d\n", strlen(arr3));
return 0;
}
解释:
(1)sizeof是计算大小的,strlen是计算'\0'前的字符个数的。
4.strcmp函数
a.代码1
int main()
{
char arr1[] = "abc";
char arr2[] = "abc";
char arr3[] = "bcd";
printf("%d\n", strcmp(arr1, arr2));
printf("%d\n", strcmp(arr1, arr3));
return 0;
}
解释:
(1)两个字符串比较,就是字符逐个比较,直到发现不匹配为止。
注意:
(1)两个字符串进行比较时,如果arr1等于arr2,strcmp返回零。arr1小于arr2,strcmp返回一个小于零的数(不一定是-1)。arr1大于arr2,strcmp返回一个大于零的数(不一定是1)。
(2)进行两个字符串比较时,一定要有'\0'。
b.代码2
int main()
{
char arr1[] = "abc";
char arr2[] = "abc";
if (strcmp(arr1, arr2))
{
printf("aa");
}
else
{
printf("bb");
}
return 0;
}
注意:
(1)不要把代码解读成arr1与arr2相等,结果为真,执行if语句。此时的strcmp的返回值是0,所以执行else语句。
5.strncmp函数
a.代码1
int main()
{
char* str1 = "abc";
char* str2 = "abcd";
printf("%d\n", strncmp(str1, str2, 2));
printf("%d\n", strncmp(str1, str2, 4));
return 0;
}
解释:
(1)选择需要比较的个数,返回值和strcmp一样。
int strncmp( const char *string1, const char *string2, size_t count );
6.strcpy函数
a.代码1
int main()
{
char dest[] = "abc";
char* src = "de";//"de"等价于"de\0"
printf("%s", strcpy(dest, src));
return 0;
}
解释:
(1)
char *strcpy( char *strDestination, const char *strSource );
将src字符串的副本(所以src是不能改变的),拷贝到到dest(所以dest是可以改变的),返回dest的地址 。
(2)"de"字符串后面是有'\0'的,当再次读取dest时,字符'c'是无效字符。
(3)拷贝后的结果
注意:
(1)数组dest是可以改变的,一定不是字符串常量,即char*dest="abc";
(2)src一定要以'\0'结尾,不然程序会崩溃的。
(3)保证dest的空间足以容纳拷贝过来的字符串,不然会导致溢出。
b.代码2
int main()
{
char dest[4] = "abc";
char* src = "efgh";
printf("%s", strcpy(dest, src));
return 0;
}
解释:
(1)dest的空间只有4个,拷贝过去的字符有5个("efgh"=="efgh\0"),即使最终的结果能打印出来,但是dest周围的栈空间破坏了。
7.strncpy函数
a.代码1
int main()
{
char dest[] = "abcde";
char* src = "fgh";
printf("%s\n", strncpy(dest, src, 5));
return 0;
}
解释:
(1)
char *strncpy( char *strDest, const char *strSource, size_t count );
strncpy函数最后一个参数(count)是控制拷贝到dest里面的字符个数。当count大于src字符串个数时,数组dest将用'\0'填充到count。
b.代码2
int main()
{
char dest[] = "abcde";
char* src = "fgh";
printf("%s\n", strncpy(dest, src, 2));
return 0;
}
解释:
(1)src的字符个数大于count ,就拷贝count个字符到dest。
8.strcat函数
a.代码1
int main()
{
char dest[7] = "abc";
char*src = "def";
printf("%s", strcat(dest, src));
return 0;
}
解释:
(1)将字符串"def"(等价于"def\0")追加到dest后面。
(2)返回值为字符数组dest的地址。
注意:
(1)保证dest剩余的空间,足以容纳下追加的字符串,否则会出现溢出的情况。
(2)字符数组dest可以改变,src指向的字符串不可以改变。
9.strncat函数
a.代码1
int main()
{
char dest[7] = "abc";
char*src = "def";
printf("%s", strncat(dest, src,2));
return 0;
}
解释:
(1)在dest后面追加2个字符,即"de" ("de"后面有一个'\0',作为结束标志)。
(2)返回值为数组dest的地址。
注意:
(1)保证dest剩余的空间,足以容纳下追加的字符,否则会出现溢出的情况。
(2)字符数组dest可以改变,src指向的字符串不可以改变。
字符串函数与sizeof的使用今天就分享到这里了,如果对你有帮助的话,可以给个关注,随便给个赞。