当我在visual studio上调试它会运行但是当我运行.exe时,我收到以下错误:
c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ xstring 929行 表达式:无效的空指针
这是我的代码。
#include "stdafx.h"
#include <io.h> //For access
#include <sys/types.h> //For stat().
#include <sys/stat.h> //For stat().
#include <iostream>
#include <string>
#include <direct.h>
#include <fstream>
#include <stdio.h>
using namespace std;
int _tmain(int argc, char* argv[]){
string* argument = new string();
string strPath = argv[1];
argument = nullptr;
argument = &strPath;
if ( access( strPath.c_str(), 0 ) == 0 ){
struct stat status;
stat( strPath.c_str(), &status );
if ( status.st_mode & S_IFDIR ){
cout << "The directory exist." << endl;
getc(stdin);
}
}
else{
mkdir( "C:\\Program Files\\EZshred\\" );
getc( stdin );
}
return 0;
}
我尝试了一切,但我不知道还能做什么请帮助
答案 0 :(得分:0)
这是一些更新的代码。由于除了strPath
之外你从未真正使用strPath.c_str()
,因此没有任何理由将其包含在string
中。如果您要解析或拆分或添加它或其他什么,肯定string
更适合一般用途,但在这种情况下,它实际上没有必要。也摆脱argument
,因为它似乎没有必要。此外,你有问题地调用access()
,第二个参数为零。恰好在Linux系统上将F_OK
定义为零,但我不确定它是否保证在任何地方都如此。此外,由于您使用的是_tmain()
,因此使用_TCHAR* argv[]
也是明智的,特别是如果您正在构建Unicode或其他宽字符项目(尽管我远非权威的已经很久以前抛弃了M $ ......)。如果是这种情况,我不知道access()
,stat()
等是否适用于非char
类型,但我希望它们是......否则你需要先转换字符串...
#include "stdafx.h"
#include <io.h> //For access
#include <sys/types.h> //For stat().
#include <sys/stat.h> //For stat().
#include <iostream>
#include <string>
#include <direct.h>
#include <fstream>
#include <stdio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
// make sure we have at least argv[1] and that it is not NULL
// (shouldn't happen in theory, but paranoia is good sometimes),
// and that it does not point to an empty string
if ( (argc < 2) || (argv[1] == NULL) || (*(argv[1]) == '\0') )
return -1; // probably should print an error message here
if ( !access( argv[1], F_OK ) ){
struct stat status;
stat( argv[1], &status );
if ( status.st_mode & S_IFDIR ){
cout << argv[1] << "can be accessed and is a directory." << endl;
getc(stdin);
}
}
else{
mkdir( "C:\\Program Files\\EZshred\\" );
getc( stdin );
}
return 0;
}