引数を使用しない関数に argv[1] の内容を取得するには、正確に何をする必要がありますか?
これはどのように作動しますか?
const char *cPtr = argv[1];
そしてそれを、0 引数を取る someFunction() に渡します!
引数を使用しない関数に argv[1] の内容を取得するには、正確に何をする必要がありますか?
これはどのように作動しますか?
const char *cPtr = argv[1];
そしてそれを、0 引数を取る someFunction() に渡します!
引数として渡したくない場合は、関数がその方法でアクセスできるように、グローバルに押し込む必要があります。私は他の手段を知りません(ファイルに書き込み、関数で読み取るなどのばかげたこと以外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;
}
もちろん、これが宿題、頭の体操、または面接の質問でない限り.
なぜあなたはこれをしたいのだろうか。しかし、それはそれほどきれいではないコードを使用して行うことができます。基本的に、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;
}
私が考えることができる唯一の方法は、「const char *cPtr」をグローバル変数にすることです。
例えば
char *cPtr;
main(int argc, char **argv)
{
cPtr = argv[1];
}
void someFunction()
{
printf("%s\n", cPtr);
}
これを行う唯一の方法は、argv[1] をグローバル変数に格納し、関数内からアクセスすることです。