0

コマンドラインから送信したファイル名を開きたいのですが、ファイルは /home/docs/cs230 にあります。以下は私が試したコードですが、Linuxでコンパイルしようとするとエラーが表示されます:

int main(int arg, char* args[1]) {
   // Open the file 
   newfile = fopen("/home/docs/cs230/"+args[1], "w+b");
}
4

3 に答える 3

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を使用するというすばらしいコメントをしています。詳細については、リンクを参照してください。

于 2013-04-16T01:16:26.900 に答える
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には、FILE ではなくを使用する必要があります。

于 2013-04-16T01:18:26.120 に答える
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 );

推奨されるオプションではありませんが、ここには多くの可能性があります。

于 2014-02-25T04:42:03.150 に答える