Définir propres fonctions principales arguments argc et argv
je veux créer un objet de type QApplication qui doit les principales fonctions des arguments argc et argv en entrée:
QApplication app(argc, argv);
Depuis que je suis à l'intérieur d'une fonction définie par l'utilisateur, sans accès à la fonction principale que je veux définir ce arguments sur mon propre. J'ai essayé plusieurs méthodes mais je ne peux pas obtenir le type de conversion. Ma dernière approche ne fonctionne pas, soit:
int argc = 1;
char **argv;
char arguments[1][12] = {{"cgalExample"}};
argv = arguments;
Merci pour toute indication.
- Pourriez-vous préciser ce qui n'a pas de travail? Ne compile pas? erreur lors de l'exécution? ne pas faire ce que vous vous attendiez?
- Erreur de compilation sous Visual Studio 2008: Impossible de convertir les types. Soupçon de gs a bien fonctionné.
Vous devez vous connecter pour publier un commentaire.
Rapide et sale, mais en travaillant pour
QApplication
:Pour une information plus complète et C standard conforme solution voir D. Shawley réponse.
Pourquoi votre solution ne fonctionne pas est simple:
array[i][j]
résultats dans uni*j
de la matrice. Mais ce que vous voulez vraiment est un tableau de pointeurs vers des chaînes en elle.Si vous voulez être incroyablement pendantic, alors vous voulez quelque chose comme ce qui suit. Les points clés sont que
argv
n'est pasconst
,argv
estNULL
résilié,argc
est le nombre d'éléments utilisables dansargv
y compris le nom du programme. Il est nécessaire d'être modifiable de sorte que vous ne pouvez pas utiliser les littéraux de chaîne -argv[i]
est nécessaire pour pointer vers une modifiables tableau de caractères.La Norme (ISO/IEC 9899:1999 section 5.1.2.2.1) les états suivants est vrai concernant le
argc
etargv
dans un environnement hébergé:argc
doit être positif ou nul.argv[argc]
doit être un pointeur null.argc
est supérieure à zéro, les membres du groupeargv[0]
parargv[argc-1]
inclusive doit contenir des pointeurs vers des chaînes, qui sont donnés en œuvre les valeurs définies par l'hôte de l'environnement avant le démarrage du programme d'ailleurs dans l'environnement hébergé. Si l'hôte de l'environnement n'est pas capable de fournir des chaînes de caractères avec des lettres à la fois des majuscules et des minuscules, la mise en œuvre doit s'assurer que les chaînes sont reçues en minuscules.argc
est supérieure à zéro, la chaîne pointée parargv[0]
représente la nom du programme;argv[0][0]
doit être le caractère null si le nom du programme n'est pas disponible à partir de l'hôte de l'environnement. Si la valeur deargc
est supérieur à un, les chaînes pointées parargv[0]
parargv[argc-1]
représentent paramètres du programme.argc
etargv
et les chaînes pointées par leargv
tableau doit être modifiable par le programme, et de conserver leur dernier-valeurs enregistrées entre le programme de démarrage et de fin de programme.QApplication
les états suivants:char
tableau peut être initialisé à partir d'une chaîne littérale (éventuellement entre accolades); des caractères successifs de la chaîne littérale initialiser les membres de la matrice.&arg0[0]
le même que justearg0
?template <typename T, size_t N> void foo(T (&ary)[N])
surtemplate <typename T> void foo(T val)
si une telle spécialisation existe. Le type siarg0
correspondchar (&)[12]
avant de se dégrader àchar*
. J'ai juste pris l'habitude de passer soitchar*
ou une référence à un tableau de manière explicite.strsep
sur les arguments. Si j'utilise un autre moyen que le vôtre, par exemple. Shaley, puis par exemple.strsep
échoue avec une ERREUR de segmentation (voir stackoverflow.com/questions/3972332/...).QApplication
documents ne sont pas réellement en mesure de dire siargv[argc]
doit être null; je suis d'accord à se tromper sur le côté de la prudence et de lui donner les mêmes garanties quemain()
.Comment sur...
...ou si vous en avez besoin pour être non-const...
Pourquoi êtes-vous à propos de votre auto avec la taille du texte dans argv, je voudrais juste laisser le compilateur faire:
argc
, mais si vous frayer un processus dans linux, ne pas le faire entraînera une erreur de segmentation; et si vous effectuez une recherche sur google, il y a quelques consignes de sécurité sur ce point.warning: braces around scalar initializer
while(++argv)
style.execl
fonction prend null arguments.argv
lui-même n'est pas null.argv
estNULL
résilié. Voir ma réponse pour le texte exact.Bien que ni le C ni C++ standard nécessite, la plupart des compilateurs font les arguments principaux qui vous _argv et _argc. Si la mémoire est POSIX exige. De toute façon, vous devez utiliser quelque chose comme:
et à partir de là, vous pouvez les utiliser comme normal.
J'espère que cela fonctionne: