一个关于strncpy的问题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int find_num_string(char *outputstr, char *inputstr)
{
char *in = inputstr, *out = outputstr, *temp, *final;
int count = 0, maxlen = 0, i;
while(*in != '\0')
{
if((*in > 47) && (*in < 58))
{
for(temp = in; (*in > 47) && (*in < 58); in++)
count++;
}
else
in++;
if(maxlen < count)
{
maxlen = count;
final = temp;
}
count = 0;
}
strncpy(out , final, maxlen);
return maxlen;
}
int main()
{
char *s = "sdfs12321dfd13214327483asd2332";
char *p = (char *)malloc(strlen(s) + 1);
int count = find_num_string(p, s);
printf("%s\nlength = %d\n",p,count);
return 0;
}
函数find_num_strting实现功能:找出字符串中最长的联系数字串,并返回长度。
这里用到了strncpy,关于strncpy的用法书上是这么说的:如果源串长度大于n,则strncpy不复制最后的'\0'结束符,所以是不安全的,复制完后需要手动添加字符串的结束符才行。
这里我并没有手动添加'\0',程序运行结果正常,这个难道书上说错么?请教高手解释下,谢谢。