在学习一维数组的过程中,经常会用到一些简单的函数,在这里做一个简单的梳理。
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;
}