0

引数を使用しない関数に argv[1] の内容を取得するには、正確に何をする必要がありますか?

これはどのように作動しますか?

const char *cPtr = argv[1];

そしてそれを、0 引数を取る someFunction() に渡します!

4

5 に答える 5

9

引数として渡したくない場合は、関数がその方法でアクセスできるように、グローバルに押し込む必要があります。私は他の手段を知りません(ファイルに書き込み、関数で読み取るなどのばかげたこと以外main()):

static char *x;
static void fn(void) {
    char *y = x;
}
int main (int argc, char *argv[]) {
    x = argv[1];
    fn();
    return 0;
}

これは私がする方法ではありません。fn()とにかくアクセスするには変更できる必要があるためx、パラメーターを渡すように書き直します。

static void fn(char *x) {
    char *y = x;
}
int main (int argc, char *argv[]) {
    fn(argv[1]);
    return 0;
}

もちろん、これが宿題、頭の体操、または面接の質問でない限り.

于 2009-02-20T04:47:53.780 に答える
3

なぜあなたはこれをしたいのだろうか。しかし、それはそれほどきれいではないコードを使用して行うことができます。基本的に、char*パラメーターを受け取るメソッドであるかのようにメソッドを呼び出します。次に、メソッドで、インラインアセンブリを使用してパラメーターにアクセスします。これは、__cdecl呼び出し規約で実装されたsomeFunctionの例です。

#include "stdafx.h"

void someFunction()
{
    TCHAR *x = NULL;
    __asm 
    {
        mov eax, dword ptr[ebp + 8]
        mov x, eax
    }

#ifdef _UNICODE
    printf("%ws\n", x);
#else
    printf("%s\n", x);
#endif
}


int _tmain(int argc, TCHAR* argv[])
{
    if (argc < 2)
        return 1;

    const TCHAR *message = argv[1];

    typedef void (*FuncPtr)(const TCHAR*);

    FuncPtr p = (FuncPtr)someFunction;

    p(message);

    return 0;
}
于 2009-02-20T05:25:08.213 に答える
1

私が考えることができる唯一の方法は、「c​​onst char *cPtr」をグローバル変数にすることです。

例えば

char *cPtr;

main(int argc, char **argv) 
{
    cPtr = argv[1];
} 
void someFunction()
{
  printf("%s\n", cPtr);
}
于 2009-02-20T04:48:48.723 に答える
0

これを行う唯一の方法は、argv[1] をグローバル変数に格納し、関数内からアクセスすることです。

于 2009-02-20T04:48:41.017 に答える