1

だから私はchar *を持っています。そして、最後に少しカットしたいと思います。そう

char *sentence = "My name is Ted";

どうすればテッドを断ち切ることができますか。私はそれを文字列にしてから、部分文字列を使用することができます(Javaから来て、メソッドに行く)が、idではなくそのようにしないでください。しかし、char *でそれを行う方法がわかりません。

編集:問題についてさらに。問題は、プロセスを受け取る関数にあり、そのプロセスが開始されたときに場所を返すことを意図しています。それは大丈夫です。私はそれを得ることができます。ただし、パラメーター char *procLocation は参照によって渡されるため、場所はそこに返されます。

プロセスの名前を含む場所しか取得できません。プロセスの名前を切り取り、場所だけを返したい。場所を文字列にして、部分文字列(文字列 - プロセス名の長さ)を実行しようとしました。それはいいです。しかし

procLocation = location.c_str(); // where location.substr is the location - the process name

エラーが返されます: エラー C2440: '=' : 'const char *' から 'char *' に変換できません

4

4 に答える 4

10

これは文字列リテラルであるため、変更できません。

あなたがした場合:

char sentence[] = "My name is Ted";

前の文字を に設定するだけTedです\0

でも使ったほうがいいかもしれませんstd::string

于 2012-04-27T10:28:33.243 に答える
5

リテラルを切り取る代わりに、:で使用できる文字よりも少ない文字をコピーするコンストラクターを使用できますstd::stringchar*

const char *data = "Hello, Ted!";
string s(data, data+8);
cout << s << endl;

このプリントHello, T

std::stringこのアプローチは、サブストリングを作成して取得するよりも無駄が少なくなります。

于 2012-04-27T10:35:43.020 に答える
2

元の問題に対しては、Java から来ているため、( RFC2119の意味で) 必ず使用する必要がありstd::stringます。

#include <string>
#include <iostream>
using namespace std;

int main(int argc, const char** argv) {
    // copy c-string to std::string
    string arg0 = argv[0];
    cout << arg0 << endl;
    // find last occurrence of path separator
    size_t found = arg0.find_last_of("/\\");
    // split off filename part of string
    cout << arg0.substr(0,found) << endl;
    return 0;
}

さらに、配列をポインタとしてではなく、char配列として宣言するべきではありません (RFC2119 の意味ではすべきではありません) 。charchar

char[] s0 = "Hello World!"; // <-- is better
char * s1 = "Hello World!"; // <-- avoid this

これが優れている実際の理由については、この投稿を参照してください。また、そのような右辺値文字列を変更しない理由も示します。

于 2012-04-27T10:58:56.347 に答える
0

string質問に「c++」と「string」のタグを付けましたが、 and substr?でこれを行いたくないと言います。それがなぜなのかわかりません。可能な限り、C スタイルの文字列操作関数よりもこれらを優先する必要があります。char*

C++ の方法で行うには:

string sentence = "My name is Ted";

cout << "\"" << sentence.substr(0, sentence.rfind(' ') ) << "\"" << endl;

Cでこれを行うことはできますが(変更可能な文字列になるようにコードをわずかに変更します):

char sentence[] = "My name is Ted";
*strrchr(sentence, ' ') = '\0';

printf("\"%s\"\n", sentence);
于 2012-04-27T11:53:24.713 に答える