《代码大全》- 12.4 字符和字符串

来源:互联网 发布:数据分析师培训多少钱 编辑:程序博客网 时间:2024/05/22 08:03

C语言中的字符串

避免常见错误的几种方法


1. 把C风格的字符串的长度声明为CONSTANT+1

    在C/C++中很容易忘记长度为n的字符串需要n+1字节的存储空间,从而忘记为结束符'\0'预留空间。

    避免这种错误的方法是把字符串的长度声明为CONSTANT+1,然后在余下的代码里用CONSTANT在只带字符串的长度。

    例如:

               char name[CONSTANT+1] = {0};


               for(i = 0; i < CONSTANT; i++)

                    name[i] = 'A'; 


              strncpy( name, some_other_name, NAME_LEN);


2.用null初始化字符串以避免没有终端的字符串

    C通过查找空结束符来判断字符串的末尾。不管你认为字符串有多长,只要C没有找到'\0',它就认为字符串还没有结束。如果你忘记在字符串的最后放置一个'\0',字符串操作的结果可能就会与你预想的不一样。

    有两种方法来避免无终端字符串:

    (1)在声明字符数组的时候把它初始化为0;

    (2)在动态分配字符串时,使用calloc()而不是malloc()来把它初始化为0。calloc()会负责分配内存,并把它初始化为0。malloc()只分配内存,不执行初始化。


3.用字符数组取代C中的指针

    如果内存不是限制性的因素,那么就把你所有的字符串变量都声明为字符数组。这样有助于避免指针错误,并且在出错的时候,编译器会给你更多的警告。


4.用strncpy()取代strcpy()以避免无终端字符串

    C中的字符串函数既有安全版本,也有危险版本。较危险的函数如strcpy(),strcmp(),它们会一直运行下去,知道它们遇到一个空结束符位置。安全版本strncpy(),strncmp()会接受一个表示最大长度的参数,因此一旦处理到此参数长度位置,即使字符串会一直延续下去,你的函数调用也会即使返回。

原创粉丝点击