首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

strncpy strlen 操作时内存有关问题

2013-08-04 
strncpy strlen操作时内存问题#include stdio.h#include string.h main ( ){char *sB012345678901A2

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];之类。
或者你嘚动态分配一个连续空间

热点排行