/ / sscanf utilisant @ comme délimiteur - c, scanf

sscanf utilisant @ comme délimiteur - c, scanf

En utilisant "@" comme séparateur dans sscanf, je ne reçois pas le résultat attendu.

Exemple:

#include <stdio.h>
int main()
{
char buf[512], scan_buf1[512], scan_buf2[512];
sprintf(buf, "abc@def");
sscanf(buf, "%s@%s", scan_buf1, scan_buf2);
printf("Scanned buffer1 - %s scan buffer2 - %sn", scan_buf1, scan_buf2);
}

Expected op:
Scanned buffer1 - abc scan buffer2 - def

Actual op:
Scanned buffer1 - abc@def scan buffer2 -

Devrais-je utiliser une syntaxe spéciale pour "@"? Je ne pouvais rien voir dans la page de manuel.

Réponses:

4 pour la réponse № 1

Si vous lisez ce scanf (et famille) référence vous verrez que le "%s" le format lit

une séquence de caractères non blancs

Cela signifie que le "%s" va lire les caractères jusqu'à ce qu'il atteigne un espace blanc. Puisque vous n’avez pas de blanc dans votre entrée, tout sera lu dans la première chaîne.

Vous pouvez résoudre ce problème en utilisant le "%[" format:

sscanf(buf, "%[^@]@%s", scan_buf1, scan_buf2);