字符串的初始化和整体赋值
Posted 軒邈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串的初始化和整体赋值相关的知识,希望对你有一定的参考价值。
/*
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!
*/
以上是关于字符串的初始化和整体赋值的主要内容,如果未能解决你的问题,请参考以下文章
C++高手请进 数组可以整体赋值吗 比如我定义了b[2]=1,2 我可以直接a[2]=b[2]吗