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;
}
strchr(), strtok()? –
Utilisez 'printf ("% c ", stringg [0]);'? Quel semble être le problème? – Lundin
À 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. –