C语言字符串

C没有字符串类型,底层使用字符数组来保存字符串。

两种定义字符串方式:

1、使用字符数组来保存字符串。char str1[] = "I love U";

   相当于char str1[] = {'I',' ','l','o','v','e',' ','U','\0'};

2、使用字符指针来表示字符串。char* str2 = "I love U";

       相当于char* str;

  str = "I love U";


"I love U"底层是以字符数组形式存放的{'I',' ', 'l','o','v','e',' ','U','\0'}

最终返回的是指向数组第一个元素的地址,即指向字符类型的指针。然后将该指针赋给str1数组变量,而数组变量本身存放的就是指针。

所以字符指针也可表示字符串。char* str只是定义一个指针变量,并非定义一个字符串变量。

\0表示结束标志,不会被显示出来。

char str1[100] = "I love U"

计算定义长度为100的数组来定义一个字符串,底层会在最后一个元素后面加上\0作为结束标志,strlen()最终的长度为8

#include <stdio.h>
#include <string.h>

void stringtest1_1(){
	char str1[] = {'I',' ','l','o','v','e',' ','U'};
	printf("str1=%s,lenth=%d\n", str1,strlen(str1));
	char str2[] = {'I',' ','l','o','v','e',' ','U','\0'};
	printf("str2=%s,lenth=%d\n", str2, strlen(str2));
}

void stringtest1_2(){
	//相当于char str1[] = {'I',' ','l','o','v','e',' ','U','\0'};
	char str1[] = "I love U";
	char* str2 = "I love U";
	printf("str1=%s,lenth=%d\n", str1, strlen(str1));
	printf("str2=%s,lenth=%d\n", str2, strlen(str2));
	str2 +=5;
	printf("str2=%s,lenth=%d\n", str2, strlen(str2));
}

void stringtestmain(){
	stringtest1_1();
	stringtest1_2();
}

输出:



str2 +=5表示将str指针指向后面第5个元素


字符指针作为函数参数:

void stringtest1_3(char* to, char* from){
	//如果from指针指向的字符不为\0
	while(*from){
		*to++ = *from++;//将from指针指向的字符赋给to指针指向的元素
	}
	*to = '\0';
}

void stringtestmain(){
	//stringtest1_1();
	//stringtest1_2();
	char* str1 = "I love U";
	char str2[100];
	stringtest1_3(str2, str1);
	printf("str2=%s\n", str2);
	stringtest1_3(str2, " hehe");
	printf("str2=%s\n", str2);
}
输出:



字符指针和字符数组在很多地方可以相互替代,但需要注意几点:

1、字符数组底层真正存放了所有的字符,每个字符对应一个数组元素。而字符指针指向数组时只存放了字符数组的首地址。

2、字符数组只能在定义时赋值。char str1="I love U";不能分开写

   而字符指针可以重复赋值。char* str2="xixi"; str2="hehe"

3、定义字符数组时,程序会为每个数组元素分配内存空间。而定义字符指针变量时,只定一个指针变量,指向的内存不确定。

   char str[100];

   scanf("%s", str);




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值