Je veux tester une fonction avec le type "VOID" qui imprime quelque chose.
Par conséquent, j'ai pensé à utiliser Mon idée: P > sprintf code> et enregistrer la sortie de printexample code> dans une matrice dans la fonction code> testtring code>. void printExample(){
printf("This is a string");
}
void testString(){
char stringArray[100];
sprintf(stringArray,"%s",printExample());
printf("%s",stringArray);
}
int main(){
testString();
}
3 Réponses :
Vous devez utiliser le retour au lieu de la fonction d'impression, Ensuite, il aura une sortie comme "ceci est une chaîne". Comme dans cette photo: Entrez la description de l'image ici P>
Ne posez pas d'images hors site et ne postez pas de texte imagé texte i> qui pourrait facilement être copié et collé à votre réponse.
Veuillez poster le code directement dans votre réponse au lieu de relier une image. Vous pouvez lire sur la raison pour laquelle les images du code et des erreurs sont découragées ici .
Il essaie de tester l'effet secondaire i> d'une fonction - changer la fonction de défaite plutôt le but.
La sortie La solution quelque peu complexe dans ce cas est de rediriger quelque chose comme: p> Note J'ai omis Erreur de vérification du code dans le fichier E / S pour plus de clarté. Vous voudrez peut-être ajouter quelques-unes! P> p> printf code> est connu un "effet latéral" em> il n'est pas retourné par la fonction. stdout code> à un fichier, puis inspectez le contenu du fichier. p>
fonction donc en utilisant si vous voulez Ensuite, vous pouvez utiliser le résultat d'un appel à Si, toutefois, vous voulez tout simplement capturer tout qui est imprimé sur printf code> écrit à la console, mais il n'a rien à voir avec la valeur de retour d'une fonction dans laquelle elle est utilisée. Void printexample () code > Imprimer Ceci est une chaîne code>, mais ce sera-t-il - comme le type de retour indique correctement - non rien qui pourrait être utilisé par l'appelant de printexample code>. p> printexample code> comme le paramètre sur un sprintf (STRINGARRAY, "% s", impressionnant ()) code> est un comportement non défini; sprintf (..., "% s" code> attend un char * code> -Argument, mais printexample code> est vide code>. Votre compilateur aurait dû vous averti. P> printexample code> pour renvoyer une chaîne, vous devez écrire p> printexample code> directement comme argument sur un autre printf code>. P> stdout code> également dans une chaîne (par exemple, pour effectuer des tests automatisés), vous pourriez alors tamponner temporairement stdout code> et accéder à ce tampon puis. P> < Pré> xxx pré> p>
Mais vous avez changé le comportement de la fonction qu'il tente de tester - ce qui n'est pas le point d'un test. La fonction n'imprime plus rien i>.
@Clifford: Droite; probablement n'a probablement pas eu l'intention d'OPS.
Malheureusement, ces questions montrent l'absence de connaissances de base C ++ (ou C). C'est ma suggestion d'opter pour lire un bon livre C ++ au lieu d'essayer et une approche d'erreur de l'apprentissage C ++.
Je ne peux pas changer la valeur de retour "Void" dans quelque chose d'autre. Avez-vous des solutions différentes?
@Sergeya: Le manque de compréhension est peut-être pour la raison pour laquelle la question n'est pas claire, mais il existe une question utile ici peut-être en ce qui concerne de manière à capturer la production latérale d'une fonction pour les tests unitaires. C'est un objectif légitime, avec une suggestion invraisemblable. Je ne pense pas que beaucoup de livres (et dans ce cas C plutôt que c ++) aideront avec cela. Peut-être quelque chose que des cadres de test Unitaires unitaires?
@ Harmie176 Je conseille toujours de laisser les suggestions " mon idée i>" - de manière appropriée qui manifestement ne fonctionnera pas. Ce que vous obtiendrez en réponse, c'est beaucoup d'explication de la raison pour laquelle votre suggestion ne fonctionne pas, plutôt qu'une solution qui fonctionnera. Il y a une bonne question ici malgré les votes de descente causés par votre suggestion naïve et invraisemblable. Omettez cela et demandez simplement à la capture de la sortie standard pour les tests utilitaires. Obtenir la bonne terminologie et omettre une distraction inutile est la clé d'une bonne question claire.
@Clifford Il y a une certaine sagesse dans vos mots, j'admets.