begin process at 2010 02 10 10:06:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

pointeur de char


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pointeur de char

mardi 26 août 2008 à 15:13:17 | pointeur de char

hacker_mt

Salut tout le monde voici mon code :
#include <cstdlib>
#include <iostream>

void rajout(char ip[15], char *cmd){
         int i, j;
         for(i=0;i<40;++i){
                           if(*(cmd+i)>='a' && *(cmd+i)<='z');  //si il y a deja une lettre de commande alor passer a la prochaine case
                           else{for(j=i+1;j<40;j++){  //mettre une case vide pour l'espace et rajouter l'ip.
                                                  *(cmd+j)=ip[j-i-1];
                                                  }
                                                  }
                                                  }
}

int main(int argc, char *argv[])
{
    int choix;
    char ip[15];
    char ping[40]="ping";
    printf("ping\n\nAction :\n1)ping\n\nVotre choix : ");
    choix=getchar();
    switch(choix){
                  case '1':
                       fflush(stdin);
                       gets(ip);
                       rajout(ip, &ping);
                       puts(ping);
                       system(ping);
                       break;
                       }
}
le probleme est que a la fin ping devrai etre égale à "ping xxx.xxx.xxx.xxx" or la ping reste égale a "ping" je pence que le probleme vient des pointeurs pouriez vous m'aider à le résoudre. D'avance merci.
mardi 26 août 2008 à 16:39:59 | Re : pointeur de char

zaibacker

Salut,

Una chaine de caractère doit toujours se finir par le caractère '\0', je n'en vois pas.

Bon après j'avouerai que je ne comprend pas  "rajout(ip, &ping);" , les 2 sont des pointeurs mais tu mets un & à ping.

Puis je veux pas commencer à t'embrouiller avec mes propres solutions mais avec un strcat, tu concatènerais mieux 2 chaines de caractères dans une seule et ça t'eviterais d'utiliser la fonction "rajout".

@+
mardi 26 août 2008 à 16:42:45 | Re : pointeur de char

theneoiceman

Réponse acceptée !
Bon si on met de coté le fait que c'est pas super propre comme code je vais m'en servir de base et faire la correction de ce code.

Ton erreur vient du fait que ta chaine de base "ping" contient bien evidemment un caractère de fin de chaîne.
en mémoire ca donnerait ca (je mets pas le code caractére associé a chaque lettre ca sert a rien pour cette exemple  'p' 'i ' 'n' 'g' '\0' Et celui la tu ne l'as pas pris en compte dans ta fonction. Après avoir exécuté ta fonction tu obtiens un truc du genre :

'p' 'i ' 'n' 'g' '\0' 'x' 'x' 'x' . 'x' 'x' 'x' . 'x' 'x' 'x' . 'x' 'x' 'x'

Ton carcatère de fin de chaine est donc toujours présent et donc ta chaine de caractère passée à la fonction "system(...)" est lue en tant que "ping" alors que l'adresse IP est bien concaténée juste après !! ^^

je te file une modif de code pour ta fonction rajout , elle utilise les libs standards du C tu ferais bien d'en faire autant pour la suite

void rajout(char ip[15], char *cmd){
    // j'ai rajouté ton check pour vérifier que la longueur du tout ne faisait pas plus de 40 caracteres
    if( (strlen(cmd)+strlen(ip)+1) < 40)
    {
        // rajouter l'espace avant de concaténer la suite de la chaine de caracteres
        strcat(cmd, " ");
       // copier l'IP
        strcat(cmd,ip);
    }
}


Voilà ca devrait résoudre ton problème.

Et sinon si je devais corriger ta fonction je ferai ca : (mais bon je te conseille d'utiliser les fonctions de la lib C qui se chargent de réaliser ce genre d'opérations) :

void rajout(char ip[15], char *cmd){
         int i, j;
         for(i=0;i<40;++i)
        {
                           if(*(cmd+i)>='a' && *(cmd+i)<='z'); 
                           else
                           {
                                  // on remplace le caractere de fin de chaine par le caractere d'espacement ' ' (de valeur 0x20)
                                 *(cmd+i) = ' ';
                                  for(j=i+1;j<40;j++)
                                 {  //mettre une case vide pour l'espace et rajouter l'ip.
                                                  *(cmd+j)=ip[j-i-1];
                                  }
                            }
       }
}


A plus.

Mess with the best, die like the rest
mardi 26 août 2008 à 17:02:51 | Re : pointeur de char

hacker_mt

j'ai mi ta premiere proposition theneoiceman mais il me renvoi toujour une erreur connot convert char(*)[40] to char * for argument 2 to void rajout(char*,char*)
mardi 26 août 2008 à 17:23:35 | Re : pointeur de char

theneoiceman

J'avais oublié de reprendre ce qu'a précisé zaibacker =) Comme il l'avait déjà précisé j'avais pas jugé utile de le remettre mais bon ^^ Tu as un & en trop lors de l'appel a ta fonction de rajout.

Change l'appel a ta fonction Rajout :
remplace "rajout(ip, &ping);" par "rajout(ip, ping);" et ca marchera comme sur des roulettes ( =)

A plus.

Mess with the best, die like the rest
mardi 26 août 2008 à 18:07:44 | Re : pointeur de char

hacker_mt

effectivement merci beacoup ca marche tres bien ! mais je ne comprend pas pourquoi on ne met pas &ping vu que normalement les pointeurs c'est *pointeur = &variable et pas *ponteur = variable non ?
mardi 26 août 2008 à 18:29:18 | Re : pointeur de char

theneoiceman

ping est du type char[40], c'est a dire un char* de taille max de 40 caractères. "ping" est donc déjà un pointeur donc tu n'as pas besoin de rajouter le & juste avant son utilisation pour l'appel à la fonction "rajout" car elle prend un char* en paramètre.

Par contre si tu avais pris un char ** en deuxième paramètre de rajout, là tu aurais dû mettre un & devant "ping" lors de l'appel à rajout (pour passer en paramètre le pointeur de pointeur sur tableau de caractères).

C'est un peu dur à expliquer l'arithmétique des pointeurs mais j'espère avoir été clair :p

A plus ^^
mardi 26 août 2008 à 18:33:39 | Re : pointeur de char

hacker_mt

oui ta reponse me convient parfaitement merci encore de votre aide et a bonne prog !


Cette discussion est classée dans : int, ip, ping, char, cmd


Répondre à ce message

Sujets en rapport avec ce message

Sélection d'octet [ par dayvid75014 ] Bonjour à tous, Je récupère les octets de mon fichier vidéo dans un buffer "Buffer[]" et je voudrais sélectionner les octets 0x47 et je n'y a simplifier prog. [ par F0ra ] Bonjour,Je cherche de l'aide pour simplifier mon programme au maximumVoici, le contenu du fichier txt :0 1 2 5 3 4 . 1 2 51 1 5 2 2 6 . 9 2 3 2 5 9 8 probleme affichage structure [ par lil_adriano ] Slt tous le monde j'ai un souci avec l'affichage de mes structures. je dois faire la gestion d'une pizzeria.j'ai cree les structure et quelques proced int main(int argc, char ** argv) [ par agent 047 ] Bonjour,mon probleme se porte sur le paramètre "char **argv" de la fonction principale utile pour connaître les adresses de chaque argument.Par exempl concatènation de char [ par nord666 ] Salut,J'aimerais pouvoir concatèner des char. Voici ce que je veux faire :int i = 0; //Peut être variable. Ce n'est que pour l'exemplechar * charConca Problème en tête bitmap [ par piroman14 ] Slt tt le monde!Je rencontre un petit problème dans mon algorithme. En effet, je n'arrive pas à coder l'en-tête d'une image bitmap correctement. J'obt Afficher un Int dans une ListBox ? [ par KroOon ] Bonjour alors je vous explique mon petit Probléme je débute en Programmation Pour lla Creation d' Applications Windows.Je souhaiterais A partir d' un matrice de caractere en c [ par flofloo ] slt tout le monde voici mon probleme : char **Init_Matrice_IrcMSG(int ligne,int colone){     char **mat = NULL;     int i;     mat = Affecter l'équivalent hexa d'un int décimal dans un char [ par kididouille ] Bonjour, je bloque:J'ai une fonction où je recois une date format UTC YYMMDD on m'envoie un int par exemple 080829 (la date d'aujourd'hui)je dois fair Objet : ajout et taille [ par scorpion077 ] Bonjour,j'essai de corriger un DS portant sur la POO. voici mon code:--------------------------------------------------------------------------------#


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales