数组(二)

    在学习一维数组的过程中,经常会用到一些简单的函数,在这里做一个简单的梳理。

sizeof()
sizeof()函数在C语言中用来计算对象的大小,获取的是字节,比如我们来看下面的例子:
#include<stdio.h>
main(){
int c[4]={1,3,5,7};//相当于c[4]={1,3,5,7};
printf(“数组占用了%d 个字节,一共有 %d 个元素\n”,sizeof©,sizeof(c[0]));
return 0;
}
该函数输出的结果是:数组共占用了16个字节,含有4个元素

strlen()
strlen()表示输入数组的长度,比如如下的例子:
#include<stdio.h>
#include<string.h>

				main(){
					char name[20];
					char len;
					
					printf("输入人的姓名:");
					fgets(name,sizeof(name),stdin);
					len=strlen(name);
					printf("输出姓名的长度:%d",len);
					
					return 0;
				}
     比如我在该程序中输入gong yu,该程序输出的结果是:输出姓名的长度: 8

不难理解,fgets()函数在输入时会带上结束符,所以加上空格,我的输出结果就是8了。

strcmp()
strcmp()是将两个字符串进行比较,比较的顺序是先从前往后比较,同序号的字符按ASCII码值进行比较,直到遇见对应字符不等或者字符串结束,如下:
int strcmp ( const char * str1, const char * str2 );
当str1<str2时:返回值<0
当str1>str2时:返回值>0
当str1str2时:返回值0

			#include<stdio.h>
			main(){
				char str1[32]="hello";
				char str2[32];
				int ret;
				
				printf("输入一个字符串:");
				gets(str2);
				ret=strcmp(str1,str2);
				printf("%d",ret);
				return 0;
				
			}

输出结果为:
在这里插入图片描述
通过以上三种情况便可以看出该用法,但是不难看出之前的一个问题,就是gets()函数本身会存在一个越界的问题,因此上述函数我们需要优化一下使用fgets()函数,如下:
#include<stdio.h>
#include<string.h>
main(){
char str1[32]=“hello”;
char str2[32];
int ret;

				printf("输入一个字符串:");
				fgets(str2,sizeof(str1),stdin);
				ret=strcmp(str1,str2);
				printf("%d",ret);
				return 0;
				
			}

输出的结果为:
在这里插入图片描述
结果却发现同样输入的hello,结果却是-1,这是为什么呢?这是因为我们上面讲过的fgets()函数会带入一个结束符造成的,要解决这个问题,我们只要限制我们输入字符的长度就好了,在输入过程中我们制定字符串的长度就可以有效的解决这个问题,这里就要引入一个新的函数strncmp().

strncmp()
该函数的用法如下:
int strncmp ( const char * str1, const char * str2, size_t num );
那么上面的函数可以改为:
#include<stdio.h>
#include<string.h>
main(){
char str1[32]=“hello”;
char str2[32];
int ret;

				printf("输入一个字符串:");
				fgets(str2,sizeof(str1),stdin);
				ret=strncmp(str1,str2,strlen(str1));
				printf("%d",ret);
				return 0;	
			}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值