C-风格字符串一共有三种表示形式:
1 字符数组的表示形式
2 字符串字面值表示
3 被设置成字符串地址的char指针
初始化方式:
数组的初始化
char name[20] = {'z','p','f'};
char name[20] = "zpf";//这是上面写法的简写,剩余的部分都填0
字符串字面值:
编译在内存中开了一块区域,专门用于存放字符串字面值。而用“”括起来的字符串其实表示的是在内存中存放这个字符串的首地址。
如“zpf”,表示的就是内存中存放“zpf”的首地址
char 指针
char * name = "zpf";//一般来说,一般不可以通过name来修改“zpf”的值,因为有可能一个字符串如“zpf”,在文件中多次出现,但只存储了一个副本在内存中。如果修改了其中一个,那会直接影响其余的。一般来说编译器也不允许这么做,即使允许,会出现运行时错误。最好在声明时就把该指针声明为const。
赋值方法char 指针
char * name;// 定义char*指针
name = “zpf”;//因为“zpf”是指针,所以可以这么做。但新版的编译器显示这个方法已经过时了,最好不要再用。
字符数组:
char name[20];
strcpy(name,"zpf"); //该方法会在字符串末尾自动填‘\0’,但如果字符串的字符数超过了name数组的长度,则会发生数组越界的情况
或者: strncpy(name,"zpf",20); //如字符串的长度超过了n,则该方法不会在字符串的末尾自动填‘\0’,如果未超过n,则会在字符串的末尾填‘\0’;
还有strcat,strncat等方法。
注意
1.从文件或者标准输入来读取字符串时要注意不要使用char*(会出现段错误),而应该使用相当大的字符数组来读取。(猜测,在读标准输入时应该是一个字节一个字节读取赋值的)。