VC++2005中,下面红色部分的代码编译的时候出了下面的警告,我在坛里向高手请教了,大家给了我很多修正的办法: 
1.使用fopen_s,fscanf_s; 
2.#define _CRT_SECURE_NO_DEPRECATE 或 #pragma warning(disable:4996) 2的解决办法,我把他们放到文件头中,但不起作用,不知道是不是我放错了地方,还是怎么搞的,请大家帮帮我吧? 
1的解决方法见下面绿色代码,但是我编译成功后,执行时出现异常,提示no symbol可以读取。不知道怎么搞的,是不是fopen_s,fscanf_s打开和读取数据和fopen以及fscanf的不一样啊?我使用fopen,fscanf读txt文件没有问题的! 
(我使用的txt文件每行的格式为1 1 1 1 1 1 1 
                          2 2 2 2 2 2 2 ,中间是空格,每行以回车结束。) 编译的代码: 
FILE* pfile=fopen(FileName,_T("r")); 
fseek(pfile,0,SEEK_SET);          
fscanf(pfile, "%[^\n] ", str_line); 
上面代码编译的提示下列警告: 1>c:\documents and settings\scan\desktop\kdtree\kdtree\globalvariable.cpp(38) : warning C4996: 'fopen' was declared deprecated 
1>        d:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen' 
1>        Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' 
1>c:\documents and settings\scan\desktop\kdtree\kdtree\globalvariable.cpp(40) : warning C4996: 'fscanf' was declared deprecated 
1>        d:\program files\microsoft visual studio 8\vc\include\stdio.h(249) : see declaration of 'fscanf' 
1>        Message: 'This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' 
使用fopen_s和fscanf_s改变后的下代码: 
FILE* pfile; 
  if(fopen_s(&pfile,FileName,_T("r"))!=0) 
  { 
    printf("cannot open file\n"); 
    exit(0); 
  } 
  while(7 == fscanf_s(pfile,"%f %f %f %f %f %f %f", &X, &Y, &Z, &intensity, &r, &g, &b)) //读取Leica pts格式的源文件 
  { 
    coordvertex->point.set1Value(num, X, Y, Z);                                        //保存三维坐标点 
    color->rgb.set1Value(num, (float)(r/255.0),(float)(g/255.0),(float)(b/255.0));    //为每个点设置源文件的点的颜色 
    intensity_set->set1Value(num, intensity);                                          //保存亮度     num++;                                                                            //计算点数 

解决方案 »

  1.   


    #include <stdio.h>
    #include <stdlib.h>void main()
    {
    FILE* pfile; 
    if(fopen_s(&pfile,"abc.txt","r")!=0) 

    printf("cannot open file\n"); 
    getchar();
    exit(0); 

    float X, Y, Z, intensity, r, g, b;
    while(7 == fscanf_s(pfile,"%f %f %f %f %f %f %f", &X, &Y, &Z, &intensity, &r, &g, &b)) //读取Leica pts格式的源文件 

    printf("%f %f %f %f %f %f %f", X, Y, Z, intensity, r, g, b)     ;                                                                     //计算点数 
    }
    getchar();
    }VS05调试通过。重装一下SDK试试。
      

  2.   

    要用老式的crt,可以在工程项目属性选项的C++/预处理器/预处理器定义中加上_CRT_SECURE_NO_DEPRECATE这个宏。