读书人

这都越境

发布时间: 2012-09-11 10:49:03 作者: rapoo

这都越界?

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没有被赋初值,所以对他的访问是不可预知的,出现越界访问也是可以理解的了。

读书人网 >C语言

热点推荐