私はstd::string
で作業することを好むが、ここで何がうまくいかないのか理解したい。std :: type T **とT * [N]の検索
T**
のポインタ演算が正しく機能していても、std::find
が正しく動作しない理由を理解できません。同様に -
std::cout << *(argv+1) << "\t" <<*(argv+2) << std::endl;
の場合は問題ありません。渡さ
#include <iostream>
#include <algorithm>
int main(int argc, const char ** argv)
{
std::cout << *(argv+1) << "\t" <<*(argv+2) << std::endl;
const char ** cmdPtr = std::find(argv+1, argv+argc, "Hello") ;
const char * testAr[] = { "Hello", "World" };
const char ** testPtr = std::find(testAr, testAr+2, "Hello");
if(cmdPtr == argv+argc)
std::cout << "String not found" << std::endl;
if(testPtr != testAr+2)
std::cout << "String found: " << *testPtr << std::endl;
return 0;
}
引数:Hello Worldの
出力:こんにちは
ありがとう:
のHello World
た
文字列を見つけていない文字列。
正しい結果が得られます。 – Mahesh
文字列リテラルが同じアドレスを取得する保証はありません。彼らはそうしてもいなくてもよい。一部のコンパイラでは、翻訳単位で文字列リテラルを共有することは非常に徹底していますが、そうでないものもあります。 –