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