2009-03-06 13 views
2

Mes amisRecherche de caractères indésirables dans une chaîne

Je souhaite intégrer le code suivant dans le code de l'application principale. Les caractères indésirables qui viennent peuplé avec la chaîne o/p décharges l'application Le code suivant snipette de travail ne marche pas ..

void stringCheck(char*); 

int main() 
{ 
    char some_str[] = "Common Application FE LBS Serverr is down"; 
    stringCheck(some_str); 
} 


void stringCheck(char * newString) 
{ 
    for(int i=0;i<strlen(newString);i++) 
    { 
     if ((int)newString[i] >128) 
     { 

TRACE(" JUNK Characters in Application Error message FROM DCE IS = "<<(char)newString[i]<<"++++++"<<(int)newString[i]); 

     } 
    } 
} 

Quelqu'un peut-il s'il vous plaît me montrer les meilleures approches pour trouver des caractères indésirables dans une chaîne ..

Merci beaucoup

+0

La prochaine fois que vous demanderez de l'aide, prenez le temps de formater correctement votre question. Le code doit être indenté de quatre espaces pour être reconnu comme code. N'utilisez pas d'onglets. – OregonGhost

Répondre

5

Votre char est probablement représenté signé. Cast à unsigned char place pour éviter qu'il devienne un entier négatif lors de la coulée à int:

if ((unsigned char)newString[i] >128) 

En fonction de vos besoins, isprint pourrait faire un meilleur travail, vérifier un caractère imprimable, y compris l'espace:

if (!isprint((unsigned char)newString[i])) 
    ... 

Notez que vous devez convertir en unsigned char: l'entrée isprint requiert des valeurs entre 0 et UCHAR_MAX comme valeurs de caractère.

+0

pour (int i = 0; i ronan

+0

comme je l'ai dit, transtyper en caractère non signé en premier. le comportement n'est pas défini si vous ne le faites pas. Les implémentations existantes utilisent la valeur à indexer dans un tableau. Si vous ne lancez pas, ils indexeront dans un endroit arbitraire. les chances sont que cela provoque des choses étranges à se produire –

+0

aussi http://www.catb.org/~esr/faqs/smart-questions.html#id307849 ... –

Questions connexes