必威体育Betway必威体育官网
当前位置:首页 > IT技术

字符型数据(字符常量和字符串常量)使用及区别

时间:2019-08-28 16:42:08来源:IT技术作者:seo实验室小编阅读:86次「手机版」
 

字符常量

1-字符型

在各种不同系统中,字符类型都占一个字节(8位)。定义如下:

char c='a';//C 语言中,使用单引号把字符引起来构成字符常量,双引号"abc"是字符串常量也可以用字符对应的ASCII码赋值,如下:

char c=97;

char c='good';得到的是最后一个字符 即'd'

C语言是ASCII码的形式存储字符型变量的,存储形式与整数类似,所以字符型和整数(范围0-255)之间可以通用。

2-字符串

  I -在c语言中,将字符串作为字符数组来处理。(c++中不是)

II-长度(占用内存字节)

在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,C语言规定了一个“字符串结束标志”,以字符'\0'代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到第一个字符'\0'时,表示字符串结束,由它前面的字符组成字符串。

系统对字符串常量也自动加一个'\0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的。(通过sizeof()函数可验证)  

   char two[]="abcd";

 cout<<sizeof(two);   //输出为5

 strlen 函数原型为:

 int mystrlen(const char *str){

//assert(str);

const char *p=str;

while(*p++ != NULL); // or !='\0'

return p-str-1;

}

3-strlen 和sizeof区别

strlen(char*)函数求的是字符串的实际长度,它求的方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。

char aa[10];cout<<strlen(aa)<<endl; //结果是不定的

char aa[10]={'\0abc'}; cout<<strlen(aa)<<endl; //结果为0

char aa[10]="jun"; cout<<strlen(aa)<<endl; //结果为3

而sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。

sizeof(aa) 返回10

int a[10]; sizeof(a) 返回40 

⒈sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。

⒉sizeof是操作符(关键字),strlen是函数。

⒊sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。

⒋数组做sizeof的参数不退化,传递给strlen就退化为指针了。

4-两种初始化的长度对比

#include <stdio.h>

#include <string.h>

int  main()

{

char c1[]={'I',' ','a','m',' ','h','a','p','p','y'};

char c2[]="I am hAPPy";

int i1=sizeof(c1);

int i2=sizeof(c2);

char str1[20]="12345";

printf("size c1:%d\n", i1);//10

printf("size c2:%d\n", i2);//11

printf("length:%d\n",strlen(c2));//10

printf("%d %d\n",sizeof(str1),strlen(str1));//20 5

return 0;

}

5-字符串的表示形式

在C语言中,可以用两种方法表示和存放字符串:

(1)用字符数组存放一个字符串

 char str[ ]="I love China";

(2)用字符指针指向一个字符串

 char* str="I love China";

C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。

int  main(){

char* a ="helko";

char* s[]={"how","are","you"};

int lenthS=0;

char ss[100]="\0abcd";

printf("a[2]=%c\n",*(a+2));//a[2]=l

printf("%s\n",a+1);//elko

lenthS = sizeof(s)/sizeof(char*);

printf("lenthS=%d\n",lenthS);//3

printf("%s\n",*(s+1));//are

printf("lenth of SS:%d\n",strlen(ss));//0

return 0;

}

6-字符串gets  和 scanf()的区别

scanf( )函数和gets( )函数都可用于输入字符串,gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。

char string[15]; 

gets(string); /*遇到回车认为输入结束*/

scanf("%s",string); /*遇到空格认为输入结束*/

所以在输入的字符串中包含空格时,应该使用gets输入;

7-字符串转换函数

strlwr()函数:将字符串中的大写字母换成小写字母。

strupr()函数:将字符串中的小写字母换成大写字母。

注:此函数是直接对原字符串进行操作,字符串的值会改变;

int main(){

char a[]="zbc";

char b[]="ASD";

printf("before:%s\n",a);

printf("Uper:%s  Lower:%s\n",strupr(a),strlwr(b));

printf("after;%s\n",a);

return 0;

}

相关阅读

sockaddr_in与sockaddr的区别,以及对网络字节序和主机

一、sockaddr sockaddr在/usr/include/bits/socket.h下,查看sockaddr的结构: struct sockaddr { __SOCKADDR_COMMON (sa_);

FPGA与CPLD的区别

FPGA FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。内部基

微博和博客在营销方面有什么本质的区别

玩微博营销不在乎你有多少粉丝,也不在乎你有多少活跃的粉丝,而在与你有什么样的人脉&mdash;-互联网人脉!比如我的微博只有1000个粉

SEO和网络推广的区别 你Get到了吗?

现在网络推广作为很多企业网络营销的一个手段,随着搜索引擎的功能不断强大,SEO这个行业不断盛行,然而很多人认为seo和网络推广是一样

天猫官方密令个人密令的区别是什么?使用技巧是什么?

天猫密令红包的类型是有很多种的,也是商城比较火爆的玩法,很多的人对于这个类型都不太了解,下面就天猫官方密令和个人密令来为大家介

分享到:

栏目导航

推荐阅读

热门阅读