Quel est le problème avec strndup?
Je suis en train d'écrire un analyseur syntaxique à l'aide de flex. Je suis sous Mac OS X 10.6.7.
J'ai déjà inclure les fichiers d'en-tête comme ceci:
#include "string.h"
#include "stdlib.h"
mais il dit
Undefined symbols for architecture x86_64:
"_strndup", referenced from:
_yylex in ccl2332A.o
ld: symbol(s) not found for architecture x86_64
pourquoi?
Notez que Mac OS X 10.10.2 (Yosemite) fournit
strndup()
— et aussi strnlen()
.OriginalL'auteur Zhu Shengqi | 2011-05-19
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, il n'existe pas de méthode strndup en chaîne.h ou stdlib.h, essayez d'utiliser strdup (), ce qui est probablement ce que vous voulez. Si vous avez vraiment besoin de spécifier la longueur que vous voulez allouées que vous pourriez faire à l'aide de malloc et memcpy à la place.
strndup
est "standard", mais cette norme n'est pas largement mises en œuvre (encore). Il a été présent dans la GLIBC comme une extension pour un bon moment. (Mais +1 quand même, malloc + strcpy est une bonne solution.)Mat: Nice, je n'étais pas au courant.
Notez que si vous voulez
strndup
-comme le comportement, vous devez utilisermemchr
(recherche d'un octet null dansn
octets) pour trouver la longueur, ajouter 1,malloc
ça, et puismemcpy
et enfin ajouter le terminateur null. Il n'y a pas besoin d'utiliserstrncpy
.OriginalL'auteur Rickard
strndup
est une extension GNU et n'est pas présent sur Mac OS X. Vous aurez soit à ne pas l'utiliser ou de la fourniture de certains de la mise en œuvre, comme cette une.OS X 10.6 a été certifié comme entièrement conforme POSIX 2003. Il a été libéré après seulement trois mois de FreeBSD ajout d'une mise en œuvre de
stndup
. Je pense que c'est pardonnable de ne pas avoir tiré dans une toute nouvelle version du noyau juste avant d'aller de l'or. Je crois 10.7 avait cette fonction.OriginalL'auteur
Si vous avez besoin d'un strndup mise en œuvre, vous pouvez utiliser ce un.
strndup
pour ces plates-formes qui n'en ont pas". BTW la taille (chars
) argument destrndup
est de typesize_t
, qui est distinct deint
.OriginalL'auteur Kjetil Hvalstrand