设为首页 加入收藏

TOP

【C语言教程】C语言中的字符串解析
2018-05-23 09:17:43 】 浏览:70
Tags:语言 教程 言中 字符串 解析

字符串的概念:

字符串是有序字符的集合;
字符串是程序中的基本元素之一;
C语言中没有字符串的概念
C语言中通过特殊的字符数组模拟字符串;
C语言中的字符串是以"\0"结尾的字符数组。

C语言中,双引号引用的单个或多个字符是一种特殊的字面量
存储于程序的全局只读存储区;//被编译后存储于只读存储区
本质为字符数组,编译器自动在结尾加上"\0"字符。

字符串字面量的本质是数组——不能被改变。

#include 
  
   

int main()
{
	char ca[] = {'h', 'e', 'l', 'l', 'o'};   //字符数组
	char sa[] = {'h', 'e', 'l', 'l', 'o', '\0'};  //字符串
	char ss[] = "hello world!";	//字符串
	char *str = "hello world~";	//字符串
	
	printf("%s\n", ca);
	printf("%s\n", sa);
	printf("%s\n", ss);
	printf("%s\n", str);
	
	return 0;
	
}

  

编译运行:

~/will$ ./a.out
helloXqhello world!  
hello
hello world!
hello world~
所有与字符串相关的操作都与字符串末尾的"\0"有关,

没有"\0"则会退化为字符数组,字符数组是不能作为参数被字符串处理函数处理。(%s)

字符串字面量的本质是一个数组;
字符串字面量可以看做 常量指针
字符串字面量中的字符不可改变;

字符串字面量至少包含一个字符。

下面的表达式正确吗?

	char b = "abc"[0];		 //数组访问操作符访问第一个字符数组的字符,注意此处就是字符数组。
	char c = *("123" + 1);   //指针运算
	char t = *"";			 //"\0"的ASIC码

编译运行下面代码:

#include 
  
   

int main()
{
	char b = "abc"[0];
	char c = *("123" + 1);//常量指针
	char t = *"";
	
	printf("%c\n", b);
	printf("%c\n", c);
	printf("%d\n", t);
	
	return 0;
	
}
  

输出结果:

~/will$ ./a.out
a
2
0
字符串的长度:
字符串的长度就是字符串所包含 字符的个数
字符串长度指的是第一个'\0'字符前出现的字符个数;

通过'\0'结束符确定字符串的长度;

观察下面代码:

#include 
  
   
#include 
   
     int main() { char s[] = "hello\0world"; int i; for(i=0; i
    
     

编译运行:

~/will$ ./a.out
h
e
l
l
o

w
o
r
l
d

hello
12
5
3

可见,对于字符数组,是不能被字符串处理函数处理的,能被处理的只能是字符串,而字符串以'\0'结尾,所以字符串为“hello”。使用sizeof(s)取值是对整个字符数组加上最后的'\0'进行计算。而strlen()是对字符数量进行计算,不包括最后的'\0'。

小结:C语言中通过字符数组模拟字符串
C语言中的字符串使用'\0'作为结束符
字符串字面量的本质为字符数组
字符串相关函数都依赖于结束符'\0'。


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言实现定时关机的代码教程 下一篇面试在即,总结一波C的基础代码

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目