字符串注意事项
- (1)C语言中字符串的表述通过:若干个字符组成序列,形成一个字符数组组成一个字符串,由于字符串使用频率高,为了方便使用,C++为字符串制定模板类,STL中有string类,列举了字符串常见属性的一些操作
- (2)C/C++中每个字符串都以字符'\0'结尾,以此作为字符串结束的标志,但需要注意的是,由于这个额外字符的开销,字符串边界问题需要谨慎考虑,以免越界
char str[10];
strcpy(str,"0123456789");
上述代码没有考虑字符串结尾的额外字符,导致数组越界访问
- (3)C/C++通常把常量字符串放到单独的一个内存区域(内存分配代码段存放常量及代码)
char str1[]="hello world";
char str2[]="hello world";
char* str3="hello world";
char* str3="hello world";
根据上图中各部分在内存空间上的划分:
可以看出str3和str4是两个指针,这两个指针变量仅存储在栈区,自身无需开辟空间,只需要把它们指向常量数据在内存中的地址即可,因此,str3和str4指向的是同一个地址
str1和str2是两个字符串数组,在栈区为这两个数组开辟足够大小的空间存放从常量区拷贝过来的常量字符串,因此二者分别拷贝到各自栈区开辟地址上存放,str1和str2地址不同