2017-02-28 5 views
-2
char string[200]="ret=\"y\" err=\"000\""; 
    char stringg[50]; 
    char *arg; 
    arg = strstr (string, "ret"); 
    memcpy(stringg,arg+5,1); 
    printf(stringg); 

Je veux copier la valeur de "ret", au-dessus du programme donne la sortie mais quand la valeur de ret changements je dois faire des changements dans le programme. Comment résoudre ce problèmecomment obtenir la valeur stockée dans les guillemets doubles

+0

strchr(), strtok()? –

+0

Utilisez 'printf ("% c ", stringg [0]);'? Quel semble être le problème? – Lundin

+0

À titre de suggestion: au lieu de se concentrer sur «comment obtenir cette valeur unique», vous pourriez réfléchir à la manière de l'analyser en une structure de données utile. –

Répondre

0

Dans votre code, il n'est pas nécessaire de donner une limite à votre tableau string. Vous pouvez simplement utiliser:

const char string[] = "ret=\"y\" err=\"000\""; 

Après avoir trouvé la valeur de "ret" avec strstr(), et vérifié que NULL n'a pas retourné, vous pouvez copier tout le contenu dans un tableau distinct ou pointeur, puis arrêtez la copie lorsque le premier espace est a trouvé. Cela garantirait que ret = "y" a été copié. Une fois l'espace trouvé, terminez votre tableau ou pointeur avec un terminateur \0.

Vous pouvez ensuite utiliser strchr(3) pour trouver la position du caractère '=' et, si elle existe, affecter la valeur après celle-ci dans une autre variable. Cette variable contiendra alors la valeur après le signe égal.

Voici un exemple:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) { 
    const char string[] = "ret=\"y\" err=\"000\""; 
    const char *key = "ret"; 
    const char equals = '=', space = ' ', quote = '"'; 
    char *start, *copy, *next, *value; 
    size_t i; 

    start = strstr(string, key); 
    if (start != NULL) { 
     copy = strdup(start); 
     if (copy == NULL) { 
      fprintf(stderr, "Failed to copy contents of string\n"); 
      exit(EXIT_FAILURE); 
     } 
     for (i = 0; start[i] != space && start[i] != '\0'; i++) { 
      copy[i] = start[i]; 
     } 
     copy[i] = '\0'; 

     next = strchr(copy, equals); 
     if (next != NULL) { 
      next++; 
      if (*next == quote) { 
       next++; 
       next[strlen(next)-1] = '\0'; 
       value = next; 
      } 
     } 

     printf("%s = %s\n", key, value); 

     free(copy); 
    } 

    return 0; 
}