常见字符串处理函数strcpy,strcat,strtok使用的注意事项及常见陷阱
字符串处理函数的存在能够使我们高效,便捷地处理字符串,能正确使用理解这些函数对我们的代码会有很大的帮助,但这些函数中存在一些容易被大家忽略的细节,特别是对指针理解不透彻的萌新,可能会在这些函数的造成的错误中感到绝望(我曾今就是一个这样的萌新,呜呜呜)
1.strcpy
我们首先来查看函数原型
#include <string.h>
char *strcpy(char *dest, const char *src);
函数功能就是将字符串src的内容全部复制到字符串变量dest中,返并回
dest的首地址,这个函数需要注意的内容不多:
1.dest为字符串变量即字符串数组(char dest[]=“dadadadada”)不是指向字符串常量的指针(char *dest=“dadadadadada”)新手小白很容易搞错;
2.注意尽量不要让dest越界,即src的长度不要超过dest的原本所定义的长度,否则会造成内存泄漏,有时候泄露的内存可能覆盖掉一些重要的内容导致程序出错
2.strtok字符串剪切函数
我们首先来查看该函数的原型
#include <string.h>
char *strtok(char *str, const char *delim);
函数的的功能就是:返回str字符串中被delim分割的各个部分,分多次返回,这里举一个简单的例子:
我们首先创建一个字符串变量str(一定是字符串变量哟,初学者容易将指向字符串常量的指针与字符串变量搞混)然后创建一个指向字符串常量(空格)的指针delim,该字符串常量即为分割符
#include <string.h>
int main(){
char str[]="this is my Linux";
char* delim=" ";
char* p1;
puts(str);//第一个输出
p1=strtok(str,delim);
puts(str);//第二个输出
puts(p1);//第三个输出
while(1){
p1=strtok(NULL,delim);
if(p1==NULL) break;
puts(p1);
}
return 0;
}
执行结果为:
我们不难发现在调用strtok(str,delim)后,会返回被分割的第一个部分的指针,想要得到后面被分割的部分就只需要将str换成NULL即可,当所有的部分都被返回后就会返回NULL。
但是我们发现在调用过strtok(str,delim)后,字符串变量str的内容也发生了改变,变为被分割的第一个片段。这就是常常被大家忽略的地方,所以介意大家在调用strtok前,将需要剪切的字符串用strcpy复制到另一个字符,然后进行分割操作,以防后面再用到str时发生不必要的错误,养成良好的习惯
3.strcat字符串剪切函数
函数的原型为
#include <string.h>
char *strcat(char *dest, const char *src);
函数的功能为将src的内容拼接的到dest后面,函数本身使用比较简单,小白使用时注意dest为字符串数组即可。
使用这几个函数出问题的地方常常在在在应该使用字符串变量(字符串数组,如:char str[]=“dadadad”)的地方使用了指向字符串常量的指针(char *p=“dadadadad”)