字符串的初始化和整体赋值

/*
	2022.04.01
	目的:
		验证字符串在数组、文字常量区、堆区三种存储形式的初始化和他们的整体赋值
	功能:

*/

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

#if 0
int main(void)
{
	char cArry[10] = "I LOVE C!";  /* 字符数组的初始化方式 */
	printf("Line = %d, %s\n", __LINE__, cArry);

	//cArry = "I LOVE A!";
	//printf("Line = %d, %s\n", __LINE__, cArry); /* cArry 表示的是数组的第一个元素的地址,是一个常量,那么不能给常量赋值 */

	strcpy(cArry, "I LOVE A!");
	printf("Line = %d, %s\n", __LINE__, cArry); /* 修改字符数组整体的值那么利用 strcpy 这个函数进行字符数组内容的拷贝就可以了 */

	return 0;
}

/*
	程序运行结果:
				Line = 16, I LOVE C!
				Line = 22, I LOVE A!
*/
#endif

#if 0
int main(void)
{
	char* pArry = "I LOVE C!";
	printf("Line = %d, %s\n", __LINE__, pArry);

	pArry = "I LOVE A!";
	printf("Line = %d, %s\n", __LINE__, pArry);  /* 要修改指向文字常量区的字符串内容那么直接改变指针变量指向就可以 */

	strcpy(pArry, "I LOVE B!");
	printf("Line = %d, %s\n", __LINE__, pArry);  /* 
													分析:
														1、这种写法是错误的;
														2、原因1 pArry 指向的是文字常量区,文字常量区的内容是不能被修改的;
														3、strcpy 该函数是将 pArry 所指向的内容就是拷贝替换,将原来的内容,替换成新的内容,所以是在修改文字常量中的内容,所以是错误的
												 */

	return 0;
}

/*
	程序运行的结果:
					Line = 39, I LOVE C!
					Line = 42, I LOVE A!

*/

#endif

int main(void)
{
	char* pCh; /* 定义一个指针变量 */

	pCh = (char*)malloc(sizeof(char) * 10); /* 将指针变量指向堆区给其分配的20字节的 char 类型的内存空间 */

	strcpy(pCh, "I LOVE C!");  /* 这个是字符串存放在堆区的整体赋值的方法 */
	printf("Line = %d, %s\n", __LINE__, pCh);

	pCh = "I LOVE A!";
	printf("Line = %d, %s\n", __LINE__, pCh);  

	strcpy(pCh, "I LOVE B!");  
	printf("Line = %d, %s\n", __LINE__, pCh);
											/* 
												注意:
													1、后面两句代码没有起到任何的作用;
													2、原因就是将定义的指针变量 pCh 指向了文字常量区;
													3、那么指向文字常量区的内容就是不可以修改的,那么就不可以用strcpy进行内容的赋值拷贝。
											*/

	return 0;
}

/*
	程序运行的结果:
				Line = 71, I LOVE C!
				Line = 74, I LOVE A!

*/

	return 0;
}

/*
	程序运行的结果:
				Line = 71, I LOVE C!
				Line = 74, I LOVE A!

*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

軒邈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值