C-字符串
基本点
- 从概念上讲, C语言中没有字符串数据类型
- 在C语言中,是使用字符数组来模拟字符串
- C语言中的字符串都是以’\0’结束的字符数组
- C语言中的字符串可以分配与栈空间、堆空间或者只读存储区
- 字符串的长度问题
- 字符串的长度就是字符串中所包含的字符的个数
- C语言中的字符串的长度指的是第一个’\0’前的字符个数
- 即C语言是通过’\0’结束符来确定字符串的长度
经典小例子
- strlen函数的实现:
//方式一
int strlen(const char* s)
{
int length = 0;
//assert(s);
while(*s++)
{
length++;
}
return length;
}
//方式二
int strlen(const char* s)
{
return ((assert(s)), (*s ? (strlen(s+1) + 1) : 0 ));
}
- 不要重复制造轮子
- 一般情况下, 不要去自行编写C标准库已经提供的函数, 这些函数效率安全一般都很高
- 标准库提供的函数有时会使用汇编语言实现,目的就是充分利用机器所提供的特殊指令来最求最大速度
- 字符串相关函数
- 不受限的字符串函数 strcpy, strcat, strcmp
- 这些函数在处理字符串是都是以'\0'作为结尾标记, 因此输入产生必须包含'\0'
- strcpy 和strcat必须保证目标字符数组的剩余空间足以保存整个源字符串加上'\0'
- 受限的字符串函数 strncpy, strncat, strncmp
- 即这些函数, 在处理字符串时,会根据我们指定的位置来处理(不会依赖'\0'), 即只要你不糊涂, 他们是安全的
- strncpy只赋值len个字符串到目标字符串中,
- 当源字符串长度小于len时, 剩余空间以'\0'填充, 大于时,那就填满了, 就没有'\0', 那就是你的问题喽
- strncat 与strncmp的处理与strncpy类似, 即他们会根据你提供的'n'来处理!!!!