0

プログラムの char 型変数に関して問題があります。コードが長すぎるので投稿しませんが、これは大まかに私がやりたいことです:

#include ...

char path[100];

int main()
{
    char path[100] = "C:/......";

    [...]

    out = function();
}

int function()
{
    [...]
    imwrite(path,image);
    [...]

} 

問題は、関数で imwrite の前に cout < < path を試しても、path が空であるかのように何も出力しないため、path 変数が何らかの形で失われているように見えることです。

関数でパス変数にアクセスできるようにするにはどうすればよいですか?

4

2 に答える 2

1

pathグローバル スコープだけでなく、メイン関数のスコープ内でも変数を定義しています。

main()の新しい宣言がありますpath:

char path[100] = "...";

これにより、効果的に同じ名前の 2 つの変数が得られますが、スコープは異なります。pathメソッド内からアクセスmainすると、ローカル スコープの変数にアクセスします。

この方法を維持し、グローバル スコープのpath変数を削除する場合は、関数を次のように再宣言できます。

int function(char* p_path)
{
    imwrite(p_path, image);
}

メインからパラメータとして値を渡します。

char path[100] = "...";
...
function(path);

余談ですが::path、グローバル名前空間を指定する を参照することにより、メイン メソッド内からグローバル スコープの変数へのアクセスを強制することができます。しかし、それは別の話です。

于 2012-12-04T13:34:25.470 に答える
0

グローバル変数path(グローバル スコープ内) とローカル変数pathを で定義していmain()ます。これは、 内main()pathはローカルのものをfunction()参照し、 ではグローバルなものを参照することを意味します。

パスがハードコードされている場合 (あなたが示した例のように)、これを行うことができます:

#include ...

char path[100] = "C:/......";

int main()
{
    [...]

    out = function();
}

パスを計算する必要がある場合は、代わりに次のようにします。

#include ...

char path[100];

int main()
{
    [...]
    std::copy(computedPathValue, computedPathValue + computedPathLength + 1, path);

    out = function();
}

もちろん、のstd::string path代わりにchar[100].

于 2012-12-04T13:37:00.400 に答える