linux snprintf获取字符串中的某一段的长度问题

来源:互联网 发布:2017seo内容编辑软件 编辑:程序博客网 时间:2024/06/05 07:50

如字符串 "123(456)"获取括号内的值

char *str="123(456)";char *find1=strchr(str,'(');  find1++;char *find2=strchr(str,')');char tmp[12]={0}; //用来保存获取到的值snprintf(tmp, find2-find1,"%s",find1);  

以上代码看似没问题, 复制个数 find2-find1 =3,刚好可以得到456.

可是运行得知,只能得到 45

为什么呢?

查看snprintf原型  

int snprintf(char *str, size_t size, const char *format, ...)  

当被复制的字符串长度大于size时,只能复制size-1个,外加一个\0

因为在snprintf(tmp, find2-find1,"%s",find1);中 find1所指向的字符串"456)"长度大于 find2-find1,所以要复制3个,实际要写4个,所以要find2-find1+1;

0 0
原创粉丝点击