C语言基础自学总结之六:字符串
c语言基础自学之六:字符串介绍:1.字符串就是一串字符,每一个字符串,都在结尾处有个看不到的字符,尾o也就是‘\0’,2."h"是字符串占两个字节,有个尾o,‘h’实际上是一个数字,在内存中占4个字节例子:#include int main(void){printf("%ld\n%ld\n",sizeof("h"),sizeof('h'));return 0;}一、声明一个字符串1.声明字符串1 当我们写“hello”时,就会告诉编译器,在只读数据段储存6个字符。2 “hello”表达式的值,表示字符串第一个字符的地址。例子1:#includeint main(void){char *p="hello world!";//声明一个字符串用char,char是声明字符型变量或函数(整型,整数 1个字节),由上面1/2就明白这里“hello world”表达式的值,其实就是首字母"h"的地址,为一个字符,所以可以用char *指针指向。printf("%s\n%ld\n",p,sizeof("hello world!"));//打印字符串用%s,return 0;}2.只读数据段例子1:可用指针指向#include voidfunc(void){char *p="hello"; write(1,p,10);//强制打印10个字节, write: 写到一文件中,用法: write(fd, void *buf, count);参数:fd:要进行写操作的文件描述词。buf:需要输出的缓冲区,count:最大输出字节计数return;}int main(void){char *q="world!";func();return 0;}例子2,只读数据段不可修改#include int main(void){char *p="hello world!";//p[0]='H'//这样是错误的。不可修改 p是‘h’的地址,p[0]就是‘h’。p[0]是一个空间return 0;}例子3:可初始化#include int main(void){char a[64]="hello world!";//除了可以用指针指向,也可以用一个字符串来初始化数组。这里是初始化了,a的前13个字节。 a[0]='H'; //a[0]可以修改,因为a[0]不是只读数据段的内容,而是栈里的内容,将只读数据段的‘hello world’复制到a[]里面,所以可以修改printf("%s\n",a);return 0;}二、相关函数1. atoi字符串转整型函数结构是:atoi(const char *str);意思是:将字符串转换成整数值,也就是将字符串str转换成整型值然后获取转换后的结果。返回值:返回转换后的整型值头文件是:include 例子1:#include #include //atoi函数的头文件int main(void){int a1=atoi("123");//传的是字符串的地址int a2=atoi("-123");//碰到非法字符就会停下来,也就是碰到不是数字的字符就会停下来除非是负号,但也仅限于负号为第一个字符的时候,int a3=atoi("123u123");//碰到“u”就会停下来。printf("%d %d %d\n",a1,a2,a3);//将字符串转换成数字return 0;}2. strcmp字符串比较函数结构是:intstrcmp (char *str1,char * str2);意思是:比较两个字符串的大小,也就是把字符串str1和字符串str2从首字符开始逐字符的进行比较,直到某个字符不相同或比较到最后一个字符为止,字符的比较为ASIC码的比较返回值:若字符串str1大于字符串str2返回结果大于零,若字符串str1小于字符串str2返回结果小于零,若字符串str1等于字符串str2返回结果等于零头文件是:include例子1:#include #include int main(void){ char *p="abc";//都是char *类型的。char a[]="bcd";printf("%d\n",strcmp(p,a));return 0;}3. strcpy字符串拷贝函数结构是:char * strcpy (char *dest,char * src);意思是:实现字符串的拷贝工作,也就是把字符串src中的内容拷贝到字符串dest中,使两个字符串的内容相同。返回值是:指向字符串dest的指针头