J'essaie de lire l'entrée en utilisant scanf code> et de stocker dans
char * code> Dynamiquement comme spécifié par GCC Manual , mais il donne une erreur de temps de compilation.
char *string;
if (scanf ("%as",&string) != 1){
//some code
}
else{
printf("%s\n", *string);
free(string);
//some code
}
4 Réponses :
J'ai eu une expérience limitée avec GCC, mais je n'ai jamais vu de modificateur code> code> pour scanf code>. Avez-vous essayé de remplacer le
% A code> avec
% s code> dans la troisième ligne que vous avez fournie? P>
Veuillez vous référer au lien fourni. FYI% C stocke seulement 1 char. J'essaie d'allouer de manière dynamique la mémoire pour stocker une chaîne complète de caractères 0-9A-ZA-Z.
Je sais ce que % c code> fait - je viens de manquer ce bit. Que se passe-t-il lorsque vous utilisez
% s code> au lieu de
% A code>?
% S fonctionnera si vous avez déjà alloué la mémoire. tandis que% comme (avec un drapeau) alloue la mémoire requise à * variable pouvant être libérée ultérieurement ()
@nvl - que je ne savais pas. Merci pour l'info :)
Avez-vous des extensions GNU activées? Standard C n'a pas de a code> modificateur. P>
'Entrée de chaîne dynamique' avec ou sinon vous pouvez utiliser scanf ("% comme") code> fonctionnera si le
-ansi code> ou
-std = c89 code> drapeau est Activé.
Compiler en utilisant GCC -ansi code> p>
scanf ("% ms") code> p>
Le modificateur Si vous avez au moins la version 2.7 de GLIBC, vous pouvez et devez utiliser le modificateur En outre, il est de votre responsabilité de libérer le tampon. P> A code> sur scanf em> ne fonctionnera pas si vous compilez avec le
-std = c99 code> drapeau; Assurez-vous que vous n'utilisez pas cela. P>
m code> à la place de
A code>. p>
Compiler avec '-ansi' ou '--STD = C98' fonctionne avec Scanf ("% comme").
Quelques fond sur le drapeau M code>, puisque les documents GCC / Glibc ne le mentionnent pas: gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html
Pour utiliser le modificateur A CODE>, PASS -D_GNU_SOURCE à GCC, mais bien sûr, utilisez mieux
M code>.
Confusion, avec _gnu_source défini (dans le fichier .c avant tout #include code> s), GCC 4.9.2 avec
-std = gnu99 code> avertit que
% A code > veut un
float * code>, mais vous y passez un
char ** code>. Mais le comportement correspond à
% m [ code>. Il m'a fallu un moment pour vous rappeler que
% A code> était une conversion dynamique de l'allocation, car la page de l'homme ne mentionne pas l'ancien sens de GNU qui se trouve n'importe où près des autres modificateurs. Même le nouveau POSIX.1-2008
% ms code> /
% m [ code> seulement est mentionné dans un paragraphe dense avec la largeur de champ. Vraiment facile à manquer. : /