2016-04-23 6 views
0

J'essaie de comparer deux tableaux char et d'imprimer sur le terminal si la chaîne a été trouvée ou non. Lorsque j'exécute mon code, la sortie imprimée renvoie une charge de jibber qui n'est pas liée à ce que j'ai spécifié. Je pense que plus de mémoire que j'ai spécifié est en cours d'impression mais je ne sais pas pourquoi. Strstr renvoie un pointeur vers l'index de début de la chaîne trouvée (si trouvée), null si ce n'est pas le cas. Je devine c'est ce qui cause l'erreur - mais j'ai pensé en vérifiant seulement si le résultat était nul plutôt qu'imprimer le résultat le contournerait.Utilisation de strstr dans C MBED, impression résultat

Mon code:

include "mbed.h" 
include "string.h" 

char input[] = "Hello mbed"; 
char value[] = "llo"; 

int main() { 

    char * output; 

    output = strstr(input, value); 

    bool found = false; 

    if (output != NULL) { 
     found = true; 
    } 

    printf(found ? "true" : "false"); 
} 

Ma sortie:.!

trueloHello mbed½mà $ ö [F FðMøDà (ÛÝéBÝ @ \ a0 ZFGñ @@ Ñ ZFGmºñªñ ÝÜàøZFGm¸ñ¨ñôÜ [F F «æ- + -éðAF% FFÔà9F ° GmdùÕ (F½èð-EDAF% FFÈÕ0'à « ÕàAF8F ° GmdùÕ (F½èðJh * D hS [email protected] pGðμF ° F2¡ü ÷ eo (¿% 0OÐWø% H ± m-ùÓGà-BHI ` ° ð½-? Ò x: (Ð! FhFþ ÷ ýhFþ ÷ mý (3ÐhFþ ÷ mý (hF Ðþ ÷ Uy # àjF¡ Fü ÷ Åøàþ ÷? ݳð¿ $ пð¿Dôtð¿DôdFhFþ ÷ UýF0h "Fh0FG (¿Gø% è ° ð½Oð 0 ° ð½ð¿ $ ÛÑð¿ $$ Oc: ttl:% p (¼¿ pGJëPø .......

+0

On dirait un bogue dans l'implémentation du compilateur ... vous pourriez peut-être inspecter le code assembleur généré pour voir ce qui se passe. Ou contactez votre fournisseur. –

+0

lors de la compilation, activez toujours tous les avertissements. puis corrige les messages résultants du compilateur – user3629249

+0

Je ne vois rien de mal avec le code que vous avez posté qui causerait cette erreur. Est-ce que le fichier d'en-tête "mbed.h" fait n'importe quoi? Essayez de vous débarrasser de la ligne 'include" mbed.h "'. –

Répondre

0

Il y a un problème avec le compilateur et comment il fonctionne avec des chaînes const. Ajouter le caractère NULL dans les cordes pour voir si elle cesse d'imprimer ...

printf(found ? "true\0" : "false\0"); 
+0

Salut, merci pour la réponse. Toujours régurgiter des absurdités cependant. J'ai changé mon code pour lire: si (sortie) {.... - afin de supprimer les dépendances sur le symbole NULL, mais il n'a pas réussi. – Charlie

+1

Je n'ai jamais entendu parler d'un compilateur se conduisant mal de cette façon. –

+0

Je ne l'ai pas vu avant non plus. Cela pourrait valoir la peine de l'élever comme un bug, ils pourraient le réparer. C'est certainement un comportement surprenant avec une chaîne de const. – Harry

1

ici est un code corrigé qui compile proprement, et fonctionne comme on le souhaite

Notez la façon dont les paramètres sont mis en printf()

note pourrait être une macro sur votre compilateur/libra la liste corrigée des #include déclarations

//include "mbed.h" 
#include <stdio.h> // printf() 
#include <string.h> // strstr() 
#include <stdbool.h> // bool, true, false 

char input[] = "Hello mbed"; 
char value[] = "llo"; 

int main(void) 
{ 

    char * output = strstr(input, value); 

    bool found = false; 

    if (output) 
    { 
     found = true; 
    } 

    printf("%s\n", ((found)? "true" : "false")); 
} 
+0

J'ai pris le code posté et l'ai modifié plus ou moins de la même manière, et cela a fonctionné correctement pour moi aussi. Je pense qu'il doit y avoir quelque chose de mal avec le code original ou son environnement que nous ne pouvons pas voir. –

0

printf() ry/IDE. Y compris le fichier d'en-tête, s'assure que cela fonctionne comme prévu. En outre, sur embarqué, main() ne doit jamais revenir