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

这都越境

2012-09-11 
这都越界?C/C++ codefun函数的if(*p!*) 这里越界!!!就是这里报错 !!!!#includewindows.h#includestd

这都越界?

C/C++ code
fun函数的if(*p!='*') 这里越界!!!就是这里报错 !!!!#include<windows.h>#include<stdio.h>void fun(char str[MAX_PATH]){        WIN32_FIND_DATA findData;    HANDLE hFindFile;        hFindFile=FindFirstFile(str,&findData);        if(hFindFile!=INVALID_HANDLE_VALUE)    {                do        {            if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)            {                char* p;                int nLen=strlen(str);                //检测倒数最后一一个字符是否是\                p=str+nLen-1;                //2中可能,一种是 : c:\data;  另一种是: c:\data\*.*;                if(*p!='*' )                {                    strcat(str,"\\*.*");                }                fun(str);            }            else            {                printf("%s\n",findData.cFileName);            }                    }while(FindNextFile(hFindFile,&findData));                        FindClose(hFindFile);            }}void print(char str[MAX_PATH]){    int nlen=strlen(str);    char* p=str+nlen-1;    if(*p=='\\')        *p='0';    strcat(str,"\\*.*");    fun(str);}int main(){    char str[MAX_PATH];    strcpy(str,"f:\\test");    print(str);return 0;}


[解决办法]
问题很简单撒,
你代码中间有一句注释“ //检测倒数最后一一个字符是否是\”,
这里你是想说判断'\'字符,可是在注释里这个字符被理解为换行符,意思就是下一行也被认为是注释。
于是接下来这句“p=str+nLen-2;”就被当成是注释了,所以接下来的代码认为p没有被赋初值,所以对他的访问是不可预知的,出现越界访问也是可以理解的了。

热点排行