C标准库中没有从某位置开始指定长度子字符串的函数,但可用函数 strncpy 实现。
1. strncpy介绍
strncpy原型:char *strncpy(char *dest, const char *src, size_t n)
功能:C库函数strncpy 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
当 src 的长度小于 n 时,dest 的剩余部分将用空字节(NUL字节 / \0)填充(NUL即‘\0’)。
当 strlen(src)的值>=n时,那么只有len个字符被复制到dst中,注意!它的结果将不会以NUL字节结尾(容易造成数组越界)。
int GetFixedIntervalTime(){unsigned int day = 0;unsigned int hour = 0;unsigned int min = 0;char time_buff[16]="";char stmp[8];fv_dev_manager_cfg_get(FIXED_REBOOT_UPTIME_DAY,time_buff); day = atoi(time_buff);memset(time_buff, 0, sizeof(time_buff));fv_dev_manager_cfg_get(FIXED_REBOOT_TIME,time_buff);/* 0907;1010 */memset(stmp, 0, sizeof(stmp));strncpy(stmp, time_buff, 2);//从time_buff开始位置截取2个字符长度,到stmpstmp[7] = '\0';//即使赋值满8个字节,也要将最后一位置为\0,防止访问越界。hour = atoi(stmp);//atoi(09)=9;memset(stmp, 0, sizeof(stmp));strncpy(stmp, time_buff+2, 2);//从time_buff第3个字符位置开启截取2个字符长度,到stmpstmp[7] = '\0';//即使赋值满8个字节,也要将最后一位置为\0,防止访问越界。min = atoi(stmp);//atoi(07)=7;return (day*24*60*60 + hour*60*60 + min*60);}
注意:
1)char stmp[8]="";
2)char stmp[8]; memset(stmp, 0, sizeof(stmp));
区别:相同点都是初始化
不同点:2)memset会将每个字符位置均初始化为\0, 操作:strncpy(stmp, time_buff, 2); stmp[7] = '\0'; 之后stmp下标从3-6 均不会 产生随机数。
1)操作:strncpy(stmp, time_buff, 2); stmp[7] = '\0'; 之后stmp下标从3-6 可能 会产生随机数