2011-10-24 4 views
0

Je n'ai pas codé dans c dans un moment, et je n'ai jamais été très bon avec des pointeurs.c programmin tableaux et pointeurs

J'ai ce début pour principal.

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

Je dois être en mesure de faire une copie du * argv [] dans une portée globale pour permettre à plusieurs threads d'y accéder, Y at-il un moyen rapide/facile à faire?

+3

Programmation en C == connaissant les pointeurs comme le dos de votre main. En savoir plus sur eux :) –

Répondre

1

Une façon de le faire:

char **  prog_argv; 
int   prog_argc; 

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

Ceci déclare un pointeur global prog_argv qui pointe vers votre tableau argv[]. Notez que vous devez également utiliser un prog_argc global pour être du bon côté (bien que je pense que argv[argc] est un null pointeur (?)).

Bien sûr, vous devez déclarer prog_argv et prog_argc dans un fichier d'en-tête au profit de vos autres fichiers source de projet.

Certains systèmes d'exploitation font déjà quelque chose comme ça pour vous. Les noms des variables globales sont généralement quelque chose comme _argv ou __argv.

+0

merci c'était parfait! – Benjamin

3

Vous n'avez pas besoin de copier le tableau argv (attribué à main). Vous avez seulement besoin de transmettre le pointeur à vos threads. C'est assez facile (en le passant par des arguments, ou en ayant une variable globale le contenant).

+0

puis pthread_create (& thread1, NULL, do_thread_stuff, * argv); C'est ce que j'essayais mais obtenir des erreurs, des suggestions de ce que je fais mal? – Benjamin

+2

Je pense qu'il devrait être 'pthread_create (& thread1, NULL, do_thread_stuff, arg)' sans aucune étoile. –