1

これは、C++ で作成しようとしているプログラムの一部です。
C++ を使い始めて以来、さまざまな変数の型に問題がありました。関数 mkdir には必要const charだと思いますが、正しい変数を入力から必要なものに変換する方法がわかりません。

必要な変数とインクルードはすべてプログラム内にあります。これが私の唯一の問題です。

私は自分の問題について最も具体的ではないかもしれませんが、私は C++ に慣れていないので、助けていただければ幸いです。

int createaccount(const char acc_name)
{
     int status = mkdir("/home/person/Desktop/Accounts/" + acc_name, S_IRWXU);
     return 0;
}

 

std::string new_acc_name;
cin >> new_acc_name;
new_acc_namechar = str.new_acc_namechar_str();
createaccount(new_acc_namechar);`
4

5 に答える 5

2

C++ で作業している場合は、std::string. const char*を呼び出して に変換できる組み込みの文字列型c_str()です。通常std::stringは、const char*. c_str()その時点で呼び出します。例えば:

int createaccount(const std::string& acc_name)
{
     std::string path = "/home/person/Desktop/Accounts/" + acc_name;
     int status = mkdir(path.c_str(), S_IRWXU);
     return 0;
}

そして、コードが何をしようとしているのかを推測した後:

std::string new_acc_name;
cin >> new_acc_name;
createaccount(new_acc_namechar);
于 2013-02-05T21:18:04.900 に答える
1
int createaccount(const char acc_name)
{
     int status = mkdir("/home/person/Desktop/Accounts/" + acc_name, S_IRWXU);
     return 0;
}

const char*この関数では、aとcharusing+演算子を単に連結することはできません。代わりに、int status = mkdir (string(string("/home/person/Desktop/Accounts/")+acc_name).c_str(), S_IRWXU);

于 2013-02-05T21:20:51.143 に答える
1

mkdir()(によるとman 2 mkdir)として宣言されているlibc関数です:

int mkdir(const char *pathname, mode_t mode);

確かに、const char*パス名として使用します。C ++ではstd::string、低レベルのCではなく処理することがよくchar*あります。両方を「文字列」として使用できますが、互換性はありません。std :: stringは、文字列を+演算子で連結するなどの優れた機能をサポートしています。

あなたの例では、+「文字列」を連結するために使用していますが、文字列は実際にはchar配列であるため、そのように単純に連結することはできません。

簡単な解決策は次のとおりです。

int createaccount(const std::string&filename) {
   std::string path="/home/person/Desktop/Accounts/";
   std::string fullname=path+filename;
   int status = mkdir(fullname.c_str(), S_IRWXU); 
   return 0;
} 

これは、連結c_str()にstd :: stringを使用し、C++文字列をCに変換するためにstd::stringのメンバー関数を使用します。const char*

于 2013-02-05T21:22:01.573 に答える
0

私はあなたが望むものは次のようなものだと思います:

int createaccount(const char acc_name) {
    std::string combinedPath = "/home/person/Desktop/Accounts" + acc_name;
    int status = mkdir(combinedPath.c_str(), S_IRWXU);
    return status;
}
于 2013-02-05T21:19:19.080 に答える
0

"/home/person/Desktop/Accounts/" + acc_nameこれは、単一文字であるacc_nameを文字列リテラルのアドレスに追加しています"/home/person/Desktop/Accounts/"。あなたはこのようなことをしたいのです。

int createaccount(const char acc_name)
{
  std::string dir = "/home/person/Desktop/Accounts/";
  dir += acc_name;
  int status = mkdir(dir.c_str(), S_IRWXU);
  return 0;
}
于 2013-02-05T21:19:34.900 に答える