C 语言没有专门的字符串类型,要如何对字符串进行操作呢?其中又有哪些陷阱呢?
字符串字面量
|
|
注意
不能改变字符串字面量的值,如下程序执行时产生错误 Bus error: 10
。字符串字面量可能存在只读的区域。
|
|
字符串变量
C 中,只要保证字符串是以空字符结尾的,任何一维的字符数组都可以用来存储字符串。有时很难辨别是否把字符数组作为字符串来使用。
|
|
另外,注意使用指针作为字符串变量之前必须把指针指向字符数组。或者让指针指向一个动态分配的字符串。
如果指针没有初始化,我们不知道它指向哪里,将其作为字符串时非常严重的错误。
|
|
字符串的读写
换行符、空格符或制表符等会使 scanf()
停止读入,用 scanf()
读入的字符串永远不会包含空白字符。
|
|
设计自己的输入函数
考虑如下问题:
- 在开始存储字符串之前,函数应该跳过空白字符吗?
- 什么字符会导致函数停止读取:换行符、任意空白字符还是其他某种字符?需要存储这类字符还是忽略掉?
- 如果输入的字符串太长以致无法存储,那么函数应该做些什么:忽略额外的字符还是把它们留给下一次输入操作?
注意手动加上 '\0'
。
|
|
使用 C 语言的字符串库
strcpy()
在 <string.h>
中的原型如下:
|
|
函数把 s2
指向的字符串复制到 s1
指向的数组中。