c语音字符串初始化与赋值

C语言中没有专门的字符串数据类型,是通过字符数组、字符指针两种形式,对字符串进行表示。

一、字符数组

字符数组,即由一个个字符类型的元素构成的数组;与之相似的,可以想象int数组、float数组等。

1. 1 初始化&初始化时赋值

归纳以下4种初始化、及初始化时赋值方法

//方法1 先初始化,再strcpy赋值
char str[10];              
memset(str,'\0',sizeof(str));  //赋值前,通常使用memset()清理元素。重要!
strcpy(str,"123");

//方法2 先初始化,再每个元素赋值
char str[10];      
str[0]='1';             
str[1]='2';
str[2]='3';
str[3]='\0';  //c语音里,‘\0’为字符串结束符

//方法3 字符串直接赋值 (仅限初始化时!!)
char str[10] = "123"; 

//方法4 字符数组直接赋值 (仅限初始化时!!)
char str[10]={1,2,3};       

注意:
上面char str[10],申请了10个元素的字符数组,sizeof(str)的结果为10;但是实际的元素个数为3个(不包括‘\0’),strlen(str)的结果为3。.

1.2 使用字符串

1)读数据
//方法1 直接读数组名
printf("str:%s\n", str);   

//方法2 读数组元素     
printf("str[0]:%c\n", str[0]);  
2)取地址
//方法1 数组名取地址
printf("&str:%d\n", &str); 
 
//方法2 数组第一元素取地址/          
printf("&str[0]:%d\n\n", &str[0]);  

1.3 修改字符串(重要)

//方法1(推荐)  strcpy()赋值
char str2[10] = "ab";
memset(str,'\0',sizeof(str));
strcpy(str, str2);        

//方法2 字符数组元素的赋值。 
//(注意:对strlen以外、即字符串尾部以后的元素赋值时,需要考虑到尾部的‘\n’;‘\n’时字符串结束)
str[1] = '0';             
str[2] = '1';
str[3] = '\0';

注意:
1、strcpy()后,数组的内存大小不变,只是元素的值发生改变。
2、strcpy()要求源变量的内存小于等于目标变量。

1.4 其他

初始化时,[]内不设定字符串长度。
此时根据实际的赋值,数组长度=元素个数+1

char g_strErrorCode[] = "333";
printf("sizeof g_strErrorCode:%d\n", sizeof(g_strErrorCode));      //尺寸大小为4
printf("strlen g_strErrorCode:%d\n\n\n", strlen(g_strErrorCode));  //元素个数为3

二、字符指针

字符指针,即创建指向(一个或多个)字符的指针。

2. 1 初始化&初始化时赋值

//方法1 字符串直接赋值
char*p_str = "123";   

//方法2 先初始化,再字符串赋值
char*p_str;               
p_str = "123";          

2. 2 使用字符串

1)读地址
//方法1 直接读指针名
printf("p_str:%s\n",p_str);   

//方法2 逐个读元素   
printf("p_str[1]:%c\n\n", p_str[1]);   

2.3 修改字符串

//方法1 字符串常量直接赋值
p_str = "2";           

//方法2 字符指针变量赋值
char*p_str2 = "33";
p_str = p_str2;         

下面为完整的示例demo:

/*
* main.cpp
*
*  Created on:
*      Author: hisense
*/
#include <iostream>
#include <string.h>
#pragma warning(disable:4996)

#define LENTH 10

int main()
{
	//============字符数组=============
	if (1)
	{
		//1)初始化&赋值 
		char str[10];              //方法1 strcpy赋值(赋值前,先使用memset()清理元素。重要!)
		memset(str,'\0',sizeof(str));
		strcpy(str,"123");
		//str[0]='1';              //方法2 字符数组元素的赋值
		//str[1]='2';
		//str[2]='3';
		//str[3]='\0';
		//char str[LENTH] = "123"; //方法3 字符串赋值,仅限初始化时
		//char str[10]={1,2,3};    //方法4 字符数组赋值,仅限初始化时     
		printf("sizeof str:%d\n", sizeof(str));
		printf("strlen str:%d\n\n", strlen(str));

		//2)读
		//读数据
		printf("str:%s\n", str);        //方法1 直接读数组
		printf("str[0]:%c\n", str[0]);  //方法2 读数组元素

		//读地址
		printf("&str:%d\n", &str);          //方法1 数组名取地址
		printf("&str[0]:%d\n\n", &str[0]);  //方法2 数组第一元素取地址/  

		//3)修改数据  (重要!!!)
		char str2[LENTH] = "ab";
		memset(str,'\0',sizeof(str));
		strcpy(str, str2);         //方法1(推荐) strcpy()函数赋值
		printf("str:%s\n", str);
		printf("sizeof str:%d\n", sizeof(str));
		printf("strlen str:%d\n", strlen(str));

		str[1] = '0';              //方法2 字符数组元素的赋值。 (注意:对strlen以外、即字符串尾部以后的元素赋值时,需要考虑到尾部的‘\n’;c认为‘\n’时字符串结束)
		str[2] = '1';
		str[3] = '\0';
		printf("str:%s\n", str);
		printf("sizeof str:%d\n", sizeof(str));
		printf("strlen str:%d\n\n", strlen(str));

		//4)其他
		//不设定字符串长度
		char g_strErrorCode[] = "333";
		printf("sizeof g_strErrorCode:%d\n", sizeof(g_strErrorCode));      //尺寸大小为4
		printf("strlen g_strErrorCode:%d\n\n\n", strlen(g_strErrorCode));  //元素个数为3
	}

	//============字符指针=============
	if (1)
	{
		//1)初始化&赋值
		//char*p_str = "123";   //方法1 字符串赋值
		char*p_str;               
		p_str = "123";          //方法2 字符串间接赋值
		printf("p_str:%s\n",p_str);
		printf("sizeof p_str:%d\n",sizeof(p_str));
		printf("strlen p_str:%d\n\n",strlen(p_str));

		//2)读
		//读数据
		printf("p_str:%s\n",p_str);             //方法1 直接读指针
		printf("p_str[1]:%c\n\n", p_str[1]);    //方法2 读元素

		//3)修改数据
		p_str = "2";            //方法1 字符串赋值
		printf("p_str:%s\n", p_str);
		printf("sizeof p_str:%d\n", sizeof(p_str));
		printf("strlen p_str:%d\n", strlen(p_str));

		char*p_str2 = "33";
		p_str = p_str2;         //方法2 字符指针赋值
		printf("p_str:%s\n", p_str);
		printf("sizeof p_str:%d\n", sizeof(p_str));
		printf("strlen p_str:%d\n", strlen(p_str));
	}
	std::cin.get();
	return 0;
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值