C风格字符串
以空字符null结束的字符数组:
char ca1[] = {'C','+','+'}; //no null,not C-style string
char ca2[] = {'C','+','+','\0'}; //explicit null
char ca3[] = {'C','+','+'}; //null terminator added automatically
const char *cp = "C++"; //null terminator added automatically
char *cp1 = ca1; //points to first element of a array,but not C-style string
char *cp2 = ca2; //points to first element of a null-terminated char array
ca1和cp1都不是C风格字符串:ca1是一个不带结束符null的字符数组,而指针cp1指向ca1,因此,它指向的并不是以null结束的数组。其他的声明则都是C风格字符串,数组的名字即是指向该数组第一个元素的指针。
1、C风格字符串的使用
C++通过(const)char *类型的指针来操纵C风格字符串
const char *p = "some value";
while(*cp){
//do something to *cp
++cp;
}
如果cp所指向的字符数组没有null结束符,则此循环将会失败。这时,循环会从cp指向的位置开始读数,直到遇到内存中某处null结束符为止。
2、C风格字符串的标准库函数
for C:
#include<string.h>
for C++:
#include<cstring>
strlen(s);
strcmp(s1,s2);
strcat(s1,s2);
strcpy(s1,s2);
strncat(s1,s2,n);
strncpy(s1,s2,n);
这些标准库函数不会检查其字符串参数。传递给这些标准库函数例程的指针必须具有非零值,并且指向以null结束的字符数组中的第一个元素。一些标准库函数会修改传递给他的字符串,这些函数假定它们所修改的字符串具有足够大的空间接收本函数新生成的字符,程序员必须确保目标字符串必须足够大。
字符串值真的比较是比较指针上存放的地址值
if(cp1 < cp2) //compare addresses,not the values pointed to
如果cp1和cp2指向同一数组中的元素(活该数组的溢出位置),上述表达式等效于比较cp1和cp2中存放的地址;如果这两个指针指向不同的数组,则该表达式实现的比较没有定义。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现