for(;p != NULL;p++) //这个有问题,因为,指针指向数组最后一个的下一个时,是野指针,不一定为NULL,应该该为*p!='\0'
  j++; 

解决方案 »

  1.   

    首先,你最好初始化数组char a[N] = {0};
    然后,你这里的错误是,那地址和值作比较,自然不相等.
    应该是 *p != NULL
      

  2.   

    warning C4047: '!=' :'int' differs in levels of indirection from 'void *'
    有这个警告。
      

  3.   

                                                               
              我想                                                        用上null                                         
      

  4.   

    我相信,这个是可以,但是我想用上NULL.
      

  5.   

    为什么偏要用NULL呢,不明白。
      

  6.   

    别说我固执呀,因为 *p != NULL 不占内存空,所以我不想用上*p!='\0' 
      

  7.   

    顺便再问上:NULL 是地址还是值?
    不好意思我真的很菜。
      

  8.   

    null 是什么都没有,没有内存地址空间 ,
    为什么#3的说是地址与值的比较?
      

  9.   

    呵呵, NULL既可以是地址, 也可以是值.
    你还可以连NULL也不用
    for(;*p;p++) 
      

  10.   

    怎么用上for(;*p;p++) 就没警告了,
    急着等待回复。
    谢谢各位了。
      

  11.   

    *p != NULL 等价与 *p != 0 等价于 *p != '\0' (当然中间有类型转化)
    NULL是指空指针,专门设计用与指针相关的操作,如初始化,判断一个指针是否为空指针等等
    在C++中,有如下宏定义:define NULL 0,NULL与0是完全等价的;在C语言中,有如下宏定义:#define NULL    ((void *)0),因此你编译中有下面的警告:warning C4047: '!=' :'int' differs in levels of indirection from 'void *' 。虽然C/C++中有下面的宏定义,C++中NULL完全可以当0来用,但为了程序的可读性,最好不要写出*p != NULL 这样的代码,P!=NULL,或者*P != '\0',才是良好的编程风格。像FALSE,TRUE与0,1之间是一样的道理
      

  12.   

    有点懂了,VC++在处理NULL时好像有严格的要求,所以报了警告。在TC中没有警告。
    再问个“for(;p != NULL;p++) //这个有问题,因为,指针指向数组最后一个的下一个时,是野指针,不一定为NULL”
    这个我没懂