なぜstrlen()が返す <void> はVC++のデバッガ?[定休日]
-
05-09-2019 - |
質問
い文字列はC++のタイプ const char*
として渡された引数をstrlenで返します。
このようになりま
strlen(astruct.string);
おかげ..
編集:かチェック
strlen("test");
ものを無効と..なぜですか?
編集:こちらの画像 http://img14.imageshack.us/img14/1808/strlen.png
ごめんなさい明した。フォーマットはありませんがとても良いと感じました。とにかく、混乱を解決したよりがとうござTeran、ヴラドRomascanu.もしくはBrian R.ボンディの答えです。
感謝。お気軽にあります。
解決
あなたのスクリーンショットを参照:実際にはエラーが表示される必要があるとき、あなたのデバッガが<void>
ためstrlen(...)
が表示されている。
あなたは、メソッドを呼び出すと、デバッガの時計にその結果を表示することはできません。デバッガは、既存の変数とデータが表示されます。方法は、コードの作成者のいずれかによってもデバッガによって予期されなかった方法で、デバッグ中のプログラムの状態を変化させることができるので、それは要求に応じて任意のメソッドを呼び出すことができない。
は何ができ、あなたのコードでは、一時的に追加します:
size_t tmp_len = strlen(struc.string);
、その後、コンパイル、および時計にtmp_len追加します。
他のヒント
あなたは、Visual Studio 6.0の安っぽいデバッガによって混乱しています。これに依存しないでください。それは可能性が高いため、インライン化または類似したものに、戻り値を取得できませんでした。
実際の値を取得するために値をプリントアウトします。
編集:また、あなたの例から、それはあなたがとにかくstrlen関数の結果を格納することはできませんようです。また、これは、デバッガが戻り値を見ない理由かもしれません。これは、コンパイラが、それはあなたが値を使用していない場合は、実際にはstrlenを実行する必要がないことを決めたことは完全に可能です。
注:この時点でのまだのVC ++ 6.0を使用するための本当の言い訳はありません。これは、あきれるほど貧しいC ++コンパイラである古代のコンパイラとIDEです。 Visual C ++コンパイラの新しいバージョンは、それらを使用し、(IDEなし)は無料です。
strlenではないの戻り値の型は無効でのデバッガーではないことを前提と右のメッセージ。
なぜおdebbugerはvoid?
の実施strlenを使用していることもに巻#define strlen someothername_strlen.
デバッガのだろうな支援を適切にまたはその他の修飾子の機能です。
また次のようにiLen=strlen("テスト")をチェックiLenおります。
通常の電話機にてご確認ください例として以下のような機能はそのお見:
int testFunc(char*)
{
return 5;
}
おそらく得5時計としています。
はstrlenは、整数を返しますので、私はあなたはそれが "0" を返す意味と仮定します。
それはconstのchar型の*またはconstのシャア場合は、また、あなたのデータ型を指定する方法は、私はかなり**伝えることはできません。それは後者だ場合は、*あなたが単一に**を参照解除していることを確認する必要があります。
私の推測では、文字列は、それが0を返すだ理由である、NULLバイトで始まることです。
C ++では、関数は常に彼らは返すように宣言された型の値を返します。 strlen
関数宣言は次のようになりますのでます:
size_t strlen(const char *);
唯一のもの、それはの可能性の復帰size_t
です。コンパイラは、関数を呼び出すときに、戻り値の処理方法を決定するために、コンパイル時にこの情報を使用しています。ここでのポイントは、strlen
関数は、上記のように宣言されている場合、それは時々void
を返すように決めることができないということで、型の値は、他の回size_t
ます。
これは、一般的にC ++のような静的型付け言語の特徴です。動的型付けの言語(PerlやPython、Rubyの、PHPなど)では機能は、任意のタイプの、それが呼び出されるたびに値を返すように決めることができます。
これは、voidを返すことができません。ボイドは、戻り値の欠如であるので、あなたは、ERR、それを返すことができません。
どのようにして、とにかく、ボイドのためにチェックしますか?ボイドが値ではありません。あなたが無効になっている方法を示してください。それはコンパイル時や実行時ですか?
あなたが実際に行う場合は、他の方向に早くすることができますように実行し、strlen
がvoid
の戻り値の型で宣言されているシステムを持っています。