字符串处理若干准则
来源:互联网 发布:ipad不能看淘宝直播么 编辑:程序博客网 时间:2024/05/21 07:49
看一下如下代码,存在问题么?
char test1[] = "S";
char test2[] = "Mytest!";
int nSize = min(strlen(test1),strlen(test2));
strncpy(test2,test1,nSize);
当然了,最终结果会成为Sytest!,这当然不是我们想要的结果,不过没有办法。这样的字符串处理是不严谨的。那么需要注意一些什么?
1.字符数组如果需要copy其他字符串前,先做清空。我相信memset并不是一个很费时的操作,我甚至认为这可以忽略不计,但可以得到很多的好处。
2.sprintf的函数实现如下:
#ifndef _COUNT_
int __cdecl sprintf (
char *string,
const char *format,
...
)
#else /* _COUNT_ */
int __cdecl _snprintf (
char *string,
size_t count,
const char *format,
...
)
#endif /* _COUNT_ */
{
FILE str;
REG1 FILE *outfile = &str;
va_list arglist;
REG2 int retval;
va_start(arglist, format);
_ASSERTE(string != NULL);
_ASSERTE(format != NULL);
outfile->_flag = _IOWRT|_IOSTRG;
outfile->_ptr = outfile->_base = string;
#ifndef _COUNT_
outfile->_cnt = MAXSTR;
#else /* _COUNT_ */
outfile->_cnt = count;
#endif /* _COUNT_ */
retval = _output(outfile,format,arglist);
_putc_lk('/0',outfile); /* no-lock version */
return(retval);
}
可以看出来,sprintf是一个实现非常复杂的函数。MSDN上说明Write formatted data to a string.这里面是否使用sprintf值得商榷,因为sprintf是不检查数组越界的。
3.在使用strncpy和snpintf之前尤其要小心,因为n的数值一般是字符串长度,那么可能后面可能没有copy ‘0’。所以这个0一定要特别关注。
- 字符串处理若干准则
- 网页优化的若干准则
- 软件国际化的若干准则
- 分布式存储系统设计的若干准则
- 异常处理准则
- 异常处理准则
- 多字符集(ANSI)和UNICODE及字符串处理方式准则
- 若干字符串后缀函数
- string字符串若干操作
- 操作系统选择调度方式和算法的若干准则
- 关于字符串的若干小结
- 将字符串分割成若干个子字符串
- 准则
- J2EE系统异常的处理准则
- J2EE系统异常的处理准则
- J2EE系统异常的处理准则
- J2EE系统异常的处理准则
- J2EE系统异常的处理准则
- 一位大四学生的面试经历和体会
- 读林斌博士写好代码十个秘诀
- Refactoring to Patterns Review 5
- 用cos上传文件!
- 2000/xp中如何取得管理员权限(本机上)
- 字符串处理若干准则
- 如何用ASP操作XML(一)
- Oracle 9i中表的在线重定义
- 如何用ASP操作XML(二)
- 如何用ASP操作XML(三)
- 神奇的 DataGrid
- Zend Framework-Zend_View控制器脚本
- 如何用ASP操作XML(四)
- 省市县三级关联菜单