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中存放的地址;如果这两个指针指向不同的数组,则该表达式实现的比较没有定义。

原文地址:https://www.cnblogs.com/BeyondTechnology/p/1838058.html