strncpy strlen 操作时内存问题
#include <stdio.h>
#include <string.h>
main ( )
{
char *s="B012345678901A234567890987654321";
char *q;
char *p;
char *m;
char *n;
q=s;
m = strstr(q,"B01");
p = strstr(q,"901");
strncpy(n,q,p-m);
n[p-m]='\0';
printf ("n---%s\n",n);
printf("****************\n");
printf ("p---%s\n",p);
}
代码如上
此时执行的结果(符合预期的):
n---B012345678
****************
p---901A234567890987654321
将代码中的 n[p-m]='\0';
改成 n[p-m+1]='\0';
时执行结果(非预期):
n---B012345678a
****************
p---901A234567890987654321
且 n 的值的最后一位不可预测
请问:各位大虾 这就是野值吗 ? 如果是那我要如何在保证位数的情况下保证结果的可预见性呢?
比如 对 n[p-m]=' ';赋空值 还有其它方法能实现吗?
C语言 strncpy 野值
[解决办法]
写缓冲一般使用数组。
char buf[1024];之类。
或者你嘚动态分配一个连续空间