您的位置:首页 > 编程语言 > C语言/C++

C语言中字符串操作要点

2008-02-03 17:10 267 查看
选择字符串操作函数时,要知道库函数的实现方法,不同的场景用不同的库函数
能在原字符串上操作就尽量用原字符串,不要用声明临时变量用strcpy倒来倒去,
以下为几个填充一个字符串的函数,考虑其优缺点.

1.
void SendSelectStart(char *buf) // 入门级新手常写的函数
{
chat tmp[10] // 额外define一个tmp变量用来倒腾,不好
sprintf(buf,"%s","aaa");
strcpy(tmp,"%s","bbb"); // 用strcpy倒来倒去,不好.
strcat(buf, tmp);
....
return; // 什么也没返回,不好!如果能返回buf或填充数据长度,调用者可用来实现链式操作.
}
2.
char *SendSelectStart(char *buf) // 有一定编程经验者所写,
{
sprintf(buf,"%s","aaa"); // 采用sprintf的优点是灵活,能处理多种格式的数据,代码简洁
sprintf(buf,"%s%d",123); // 缺点是未考虑效率
sprintf(buf, "%s%s",buf,"bbb"); // 不仅要循环,还要再填充一次"aaa",123
.... // 如果有很多项处理,每次都对sprintf的调用都要重复前面已填充过的数据,开销太大!
return buf;
}

3.
char *SendSelectStart(char *buf)
{
strcat(buf, "aaa"); // 这里要注意:strcat内部实际上要执行一次循环,定位到字符串尾,效率还是欠考虑.
strcat(buf, "bbb"); // 此方案优点是代码简洁,缺点是只能处理字符串,不能处理别的格式的数据,.
....
return buf;
}

4.
int SendSelectStart(char *buf) // 编程老手所为
{
int cnt;
char *ptr = buf;
ptr += sprintf(ptr,"%s","aaa");
ptr += sprintf(ptr,"%d",123);
ptr += sprintf(ptr,"%s","bbb");
...
return(ptr-buf);
}

效率由高到低依次为 4 --> 3 --> 1 --> 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: