栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言—常见字符串函数与sizeof详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言—常见字符串函数与sizeof详解

1.sizeof使用

a.代码1

int main()
{
	int a = 0;
	int arr[] = { 1,2,3,4 };
	printf("%dn", sizeof(a));
	printf("%dn", sizeof a);
	printf("%dn", sizeof(&a));//表示地址的大小
	printf("%dn", sizeof(int));
	printf("%dn", sizeof(arr));//计算数组arr的大小(单位为字节)
	printf("%dn", 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',''};
	char arr2[] = { 'a','b','c' };
	char arr3[4] = { 'a','b','c' };
	char*str = "abc";
	printf("%dn", strlen(arr1));
	printf("%dn", strlen(arr2));
	printf("%dn", strlen(arr3));
	printf("%dn", strlen(str));
	return 0;
}

解释:

(1)strlen函数是计算''前的元素个数,此时arr1数组有4个空间,有'',''前面有3个元素。

(2)此时arr2数组有3个空间,没有'',所以就产生了一个随机数。

(3)此时arr3数组有4个空间,前面3个空间放的是"abc",最后一个空间系统添加了一个''。

(4)指针变量指向字符串"abc"等价与"abc"。

注意:

(1)strlen(包括strcmp strcpy strcat等)函数是用于字符串的,而不是整型数组的。

(2)strlen函数是计算''前的字符个数,即有效字符的个数。

b.代码2

int main()
{
	char* str1 = "abc";
	char* str2 = "abcd";
	if (strlen("abc") < strlen("abcd"))
	{
		printf("aan");
	}
	else
	{
		;
	}
	if (strlen(str1) - strlen(str2) > 0)
	{
		printf("aan");
	}
	else
	{
		;
	}
	return 0;
}

解释:

(1)strlen的返回值是无符号的整型(unsigned int),所以(strlen(str1) - strlen(str2))最终的值也是无符号的,即>=0。

注意:

(1)一定要引头文件,不然结果就只有一个"aa"

3.sizeof与strlen函数对比

a.代码1

int main()
{
	char arr1[] = { 'a','b','c' };//3个空间,没有字符''
	char arr2[] = "abc";//4个空间,字符'c'后面默认跟一个''
	char arr3[] = "abc";
	printf("%dn", sizeof(arr1));
	printf("%dn", sizeof(arr2));
	printf("%dn", sizeof(arr3));
	printf("%dn", strlen(arr1));
	printf("%dn", strlen(arr2));
	printf("%dn", strlen(arr3));
	return 0;
}

解释:

(1)sizeof是计算大小的,strlen是计算''前的字符个数的。 

4.strcmp函数

a.代码1

int main()
{
	char arr1[] = "abc";
	char arr2[] = "abc";
	char arr3[] = "bcd";
	printf("%dn", strcmp(arr1, arr2));
	printf("%dn", strcmp(arr1, arr3));
	return 0;
	
}

解释:

(1)两个字符串比较,就是字符逐个比较,直到发现不匹配为止。

注意:

(1)两个字符串进行比较时,如果arr1等于arr2,strcmp返回零。arr1小于arr2,strcmp返回一个小于零的数(不一定是-1)。arr1大于arr2,strcmp返回一个大于零的数(不一定是1)。

(2)进行两个字符串比较时,一定要有''。

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("%dn", strncmp(str1, str2, 2));
    printf("%dn", 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"
	printf("%s", strcpy(dest, src));
	return 0;
}

 解释:

(1)

char *strcpy( char *strDestination, const char *strSource );

将src字符串的副本(所以src是不能改变的),拷贝到到dest(所以dest是可以改变的),返回dest的地址 。

(2)"de"字符串后面是有''的,当再次读取dest时,字符'c'是无效字符。

(3)拷贝后的结果

注意:

(1)数组dest是可以改变的,一定不是字符串常量,即char*dest="abc";

(2)src一定要以''结尾,不然程序会崩溃的。

(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"),即使最终的结果能打印出来,但是dest周围的栈空间破坏了。

7.strncpy函数

a.代码1

int main()
{
	char dest[] = "abcde";
	char* src = "fgh";
	printf("%sn", strncpy(dest, src, 5));
	return 0;
}

解释:

(1)

char *strncpy( char *strDest, const char *strSource, size_t count );

strncpy函数最后一个参数(count)是控制拷贝到dest里面的字符个数。当count大于src字符串个数时,数组dest将用''填充到count。

b.代码2

int main()
{
	char dest[] = "abcde";
	char* src = "fgh";
	printf("%sn", 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")追加到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"后面有一个'',作为结束标志)。

(2)返回值为数组dest的地址。

注意:

(1)保证dest剩余的空间,足以容纳下追加的字符,否则会出现溢出的情况。

(2)字符数组dest可以改变,src指向的字符串不可以改变。

     字符串函数与sizeof的使用今天就分享到这里了,如果对你有帮助的话,可以给个关注,随便给个赞。

  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号