Question

Voici mon problème: j'ai un tableau, qui contient une commande d'un [1], suivie de plusieurs commandes args un [2], a [3], ...

Ce que je dois faire est le suivant

  • Créer une chaîne, composée du cmd et une combinaison de args Par exemple:.
  

cmd arg1 arg2 arg3

  • Exécuter cette commande-chaîne

Voici comment je le fais woud (pseudo-code):

  1. Précalculer la longueur de chaque arg et le stocker dans un tableau
  2. Obtenir une combinaison (en utilisant GNU Scientific Library)
  3. Calculer la taille en octets nécessaires pour allouer la chaîne (longueur de cmd + 1 + lengthof arg1 + 1 + 1 + argn-1) (généralement 1 pour le pour le blanc et à la fin de la \ 0)
  4. Construire la chaîne en utilisant strcat
  5. Exécutez la commande chaîne

Eh bien, ça marche mais je me demande si vous utilisez strcat qui est délibérément fait efficace / la bonne façon de le faire.

Toutes les suggestions?

Était-ce utile?

La solution

Non, en utilisant strcat() est pas efficace car il doit parcourir la chaîne pour trouver la fin chaque fois que vous l'appelez.

Il vaut mieux soit tout faire à la fois en utilisant snprintf() si vous avez (et peut presser vos arguments là-bas), ou le faire vous-même en utilisant la manipulation de pointeur direct.

Bien sûr, pour que cela importe en pratique, vous devez exécuter cette commande très souvent en effet.

Autres conseils

Si vous avez stocké les longueurs de chaque chaîne de composants que vous pouvez passer à l'aide memcpy avec les décalages de pointeur correct au lieu d'utiliser strcat qui ne doit trouver cette fin de la chaîne adn le test chaque source ombles contre '\0' , mais à part qu'il n'y a pas beaucoup plus que vous pouvez faire pour la création d'un concaténé nettement plus rapide.

strcat(), ainsi que toutes les fonctions de manipulation de chaînes de la bibliothèque standard, est inefficace. cela est dû à des chaînes sont stockés dans les C, à savoir zéro terminé, donc chaque fonction doit trouver la fin de la chaîne par itérer sur chaque caractère.

De toute façon, vous faites une optimisation prématurée: les multiples strcat () appelle ici exécutera très vite par rapport à l'exécution de la commande, vous ne devriez pas vous soucier de l'efficacité de votre façon de concaténer

.

avant d'optimiser une partie d'un code, vous devez montrer qu'il est un goulot d'étranglement et que l'optimisation permettra d'améliorer vraiment le temps d'exécution. dans la plupart des cas, il n'y a pas besoin d'optimiser: il est tout simplement pas la peine le temps passé

.

Je le ferais avec sprintf .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top