2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言:字符串内容的修改

时间:01-28来源:作者:点击数:54

关于:

1)如何修改字符串的内容

2)char str[] = "We are happy.";char* sp = "We are happy.";创建的字符串有什么不同

例1:定义一个字符串,然后修改其最后的标点符号为 ”!“,打印字符串的内容和字符串地址:

  • # include <stdio.h>
  • int main()
  • {
  • char str[] = "We are happy.";
  • printf("%p \n", str); // 00BBF900
  • str[12] = '!';
  • printf("%s \n", str); // We are happy!
  • printf("%p \n", str); // 00BBF900
  • return 0;
  • }
  • >>>
  • 00BBF900
  • We are happy!
  • 00BBF900

可见这样定义的字符串是可以直接在本体上修改其内容的,因为修改前后地址并没有变化。

例2:定义一个指针指向字符串常量,然后尝试修改字符串的标点符号:

  • # include <stdio.h>
  • int main()
  • {
  • char* sp = "We are happy.";
  • sp[12] = '!';
  • printf("%s \n", *sp);
  • printf("%p \n", sp);
  • return 0;
  • }

报错:写入访问权限冲突

在这里插入图片描述

先说结论:

  • char* sp = "We are happy."无法修改字符串内容,因为这个字符串存放在内存的常量区
  • char str[] = "We are happy."可以修改字符串内容,因为这个字符串是存放在栈中的

解释:

当执行语句char* sp = "We are happy."时,计算机操作步骤:

1)程序加载字符串值,并存放到常量存储区,常量存储器的内容是只读的;

2)程序在栈上创建sp变量;

3)将sp变量设置为"We are happy."的地址

3)若程序试图修改sp变量所指向的字符串内容就会报错,因为字符串在常量存储器,是只读的。

当执行语句char str[] = "We are happy."时,计算机操作步骤:

1)程序加载字符串值,并存放到常量存储区,常量存储器的内容是只读的;

2)程序在栈上初始化一个数组(分配空间),并自动保证该数组足够大以容纳字符串

3)程序将字符串的内容复制到栈的数组内。

这两者的区别就在于:定义指针的方法仅仅是让指针指向了常量存储器中的字符串,而定义数组的方法是得到了常量存储器中字符串的副本,所以定义数组的方法才可以修改字符串。

关于 C 语言中存储器的类型:

对用定义指针指向字符串的方法,补充一下指针sp里存的是字符串的地址,而字符串本体只有一个,就是常量区的字符串。

  • # include <stdio.h>
  • int main()
  • {
  • char* sp = "We are happy.";
  • printf("%s \n", sp); // We are happy. 字符串本体
  • printf("%p \n", sp); // 0097EDBC 字符串的地址
  • printf("&sp: %p\n", &sp); // &sp: 00CFF744 指针的地址
  • printf("*&sp: %s\n", *&sp); // *&sp: We are happy. 先取得指针的地址,然后取该地址下的指针变量所指向的值
  • return 0;
  • }
  • >>>
  • We are happy.
  • 0097EDBC
  • &sp: 00CFF744
  • *&sp: We are happy.

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门