关闭

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

395人阅读 评论(0) 收藏 举报
分类:

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" 塞入栈中的数组,这是可行的。


2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:138986次
    • 积分:2819
    • 等级:
    • 排名:第13161名
    • 原创:135篇
    • 转载:1篇
    • 译文:0篇
    • 评论:81条
    公告
    所有需要相关视频教程、印象资料、自主图书的朋友,请加

    微信公众号:秘籍酷

    我的微店:http://weidian.com/s/260920190?wfr=c 欢迎同学们来寻找趁手的装备!
    博主介绍
    林世霖,33岁
    毕业于北京科技大学

    长期从事Linux下编程开发和嵌入式培训教学,资深IT教学专家,广东省计算机协会高校“粤嵌杯”评审委员,培养超过5000名本科、大中专学生,在嵌入式Linux权威培训领域享有盛誉。
    最新评论