C语言(如何优雅地使用字符串)

原创 2016年05月30日 11:26:05

C语言中使用字符串有两种方式,用char型指针、用char型数组。他们有什么区别和联系? 且听我一一道来。



C语言表示字符串的两种方式,look:

char  *s1 = "abcde";  // s1 是指针

char s2[] = "uvxyz";  // s2 是数组


首先,任何常量都将被放置到一个固定的内存区域,叫 .rodata 区,也叫常量区。因此上述代码中的 "abcde" 和 "uvxyz" 都被放置在这里面。


其次,s1 和 s2 都是普通变量,都被放置在栈内存中。


然后,s1 是一个指针,因此它的尺寸大小永远都是四字节(32位系统),而 s2 是一个数组,尺寸大小根据具体的内容来决定。


因此,上述代码中各个变量在内存中的位置关系,用下图来表示:



对于 s1 而言,仅仅保留了一个地址0x123,该地址就是常量区中字符串 "abcde" 的地址。


对于 s2 而言,则保留了从常量区复制过来了字符串本身的内容 "uvxyz" ,从上图看到,此时 "uvxyz“ 实际上有两个副本。


那么在程序中如何使用这两种方式呢?答案很简单,如果仅仅是使用字符串,而不需要修改它,那就使用指针就行了,但是如果涉及需要对字符串内容的修改,那么就需要使用数组。


look:

strcpy(s1, "ABCDE"); // 这是错误的

strcpy(s2, "UVXYZ"); // 这是正确的


上述代码中,第一行试图将 "ABCDE" 塞到常量区,显然是不可行的。而第二行则试图将 "UVXYZ" 塞入栈中的数组,这是可行的。


版权声明:本文为博主原创文章,转载请注明出处,微信公众号:秘籍酷

EventBus—如何优雅的开始使用(官翻一)

写在前边:虽说翻译虽好,但是还是一手资料比较好,有些翻译还是不到位。如何优雅的使用EventBus ,3步走。EventBus API as easy as 1-2-3 我们开始使用EventBus...
  • shaoduo
  • shaoduo
  • 2017年07月16日 22:21
  • 540

Python3 如何优雅地使用正则表达式(详解四)

更多强大的功能 到目前为止,我们只是介绍了正则表达式的一部分功能。在这一篇中,我们会学习到一些新的元字符,然后再教大家如何使用组来获得被匹配的部分文本。 更多元字符 还有一些元字...
  • goodboy5201314
  • goodboy5201314
  • 2015年01月12日 14:52
  • 1625

如何优雅地控制线程状态

为了控制线程状态,Thread类中提供了Suspend,Resume,Abort等方法。但Suspend和Resume方法已被MS标注为已过时(Obsolete),若是简单的为线程设置一些状态量,又会...
  • u012302024
  • u012302024
  • 2014年11月27日 10:22
  • 331

Python3 如何优雅地使用正则表达式(详解二)

使用正则表达式 现在我们开始来写一些简单的正则表达式吧。Python 通过 re 模块为正则表达式引擎提供一个接口,同时允许你将正则表达式编译成模式对象,并用它们来进行匹配。 小甲鱼解释:...
  • goodboy5201314
  • goodboy5201314
  • 2015年01月12日 14:28
  • 2263

Python3 如何优雅地使用正则表达式(详解一)

注:本文翻译自 Regular Expression HOWTO,小甲鱼童鞋对此做了一些注释和修改。 正则表达式介绍 正则表达式(Regular expressions 也称为 R...
  • goodboy5201314
  • goodboy5201314
  • 2015年01月12日 14:23
  • 3200

程序员对谷歌、百度正确的使用方法

如何让你高效的使用搜索引擎来让你早点下班
  • sanjing_shou
  • sanjing_shou
  • 2017年07月11日 15:45
  • 483

EventBus事件总线——优雅地替换Handler

http://bbs.itcast.cn/thread-83609-1-1.html  什么是EventBus EventBus是Android下高效的发布/订阅事件总线机制。作用是可以代...
  • oLevin
  • oLevin
  • 2016年03月31日 20:45
  • 351

如何优雅的使用mybatis——Mybatis 深入浅出(一)

一、简介orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业...
  • xx326664162
  • xx326664162
  • 2017年08月15日 20:18
  • 379

Python3 如何优雅地使用正则表达式(详解六)

修改字符串 我们已经介绍完如何对字符进行搜索,接下来我们讲讲正则表达式如何修改字符串。 正则表达式使用以下方法修改字符串: 方法 用途 split...
  • goodboy5201314
  • goodboy5201314
  • 2015年01月12日 14:56
  • 807

Python3 如何优雅地使用正则表达式(详解三)

模块级别的函数 使用正则表达式也并非一定要创建模式对象,然后调用它的匹配方法。因为,re 模块同时还提供了一些全局函数,例如 match(),search(),findall(),sub() 等...
  • goodboy5201314
  • goodboy5201314
  • 2015年01月12日 14:43
  • 990
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言(如何优雅地使用字符串)
举报原因:
原因补充:

(最多只允许输入30个字)