2011-10-24 10 views
0

私はしばらくのうちにコード化していませんでした。c programmin配列とポインタ

私はこのメインが始まります。私は複数のスレッドがそれにアクセスすることを可能にするグローバルスコープで* ARGV []のコピーを作成できるようにする必要が

int main(int argc, char *argv[]) 

、これを行うには、高速/簡単な方法はありますか?

+3

Cでプログラミング==あなたの手の後ろのようなポインタを知っている。それらについてのすべてを学んでください:) –

答えて

1

一つの方法:

char **  prog_argv; 
int   prog_argc; 

int main(int argc, char *argv[]) 
{ 
    prog_argv = argv; 
    prog_argc = argc; 
    . . . 
} 

これはあなたのargv[]配列を指すグローバルポインタprog_argvを宣言します。安全な側にするには、prog_argcをグローバルに使用する必要があります(ただし、argv[argc]はNULLポインタ(?)です)。

もちろん、他のプロジェクトソースファイルのために、ヘッダーファイルにprog_argvprog_argcを宣言する必要があります。

オペレーティングシステムの中には、すでにこのようなものがあります。グローバル変数の名前は通常、_argvまたは__argvのようなものです。

+0

これは完璧でした! – Benjamin

3

argvの配列(mainに指定)をコピーする必要はありません。ポインタをスレッドに送信するだけで済みます。これは非常に簡単です(引数を渡すか、それを含むいくつかのグローバル変数を持つことによって)。それを行うには

+0

次にpthread_create(&thread1、NULL、do_thread_stuff、* argv);これは私が試していたものですが、間違いを犯しています、私が間違っていることを示唆していますか? – Benjamin

+2

私はスターなしで 'pthread_create(&thread1、NULL、do_thread_stuff、arg)'する必要があると思います。 –