如字符串 "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;