如字符串 "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;
本文深入探讨了在使用snprintf函数进行字符串截取时出现的问题及原因,详细解释了如何正确计算并截取指定长度的字符串片段。
1013

被折叠的 条评论
为什么被折叠?



