我想打开从命令行发送的文件名,但该文件位于/ home / docs / cs230中。下面是我尝试的代码,但是当我尝试在linux中编译时它显示错误:
int main(int arg, char* args[1]) {
// Open the file
newfile = fopen("/home/docs/cs230/"+args[1], "w+b");
}
答案 0 :(得分:2)
由于这是C ++,我们可以这样使用std::string
:
int main(int arg, char* args[]) {
// Open the file
std::string path( "/home/docs/cs230/" ) ;
path+= args[1] ;
std::cout << path << std::endl ;
FILE *newfile = fopen( path.c_str(), "w+b");
}
Mats也发表了一个很好的评论,在C ++中我们会使用fstream,你可以在链接上阅读更多信息。
答案 1 :(得分:1)
由于这是C ++,我建议:
int main(int argc, char *argv[])
// Please don't make up your own names for argc/argv, it just confuses people!
{
std::string filename = "/home/docs/cs230/";
filename += argv[1];
newfile = fopen(filename.c_str(), "w+b");
}
[虽然要完全使用C ++,但您应该使用fstream
,而不是文件
答案 2 :(得分:0)
如果你想坚持使用指针,你可以连接字符串(char *)
const char* path = "/home/docs/cs230/";
int size1 = sizeof(argv[1]);
int size2 = sizeof(path);
const char* result = new char[size1 + size2 + 2];
result[size1 + size2 + 1] = '\0';
memcpy( result, path, size1 );
memcpy( &result[ size1 ], argv[1], size2 );
不是推荐选项,但这里有很多可能性。