Я пишу парсер, используя flex. Я использую Mac OS X 10.6.7. Я уже включил заголовочные файлы, как это:
#include "string.h" #include "stdlib.h"
но там написано
Undefined symbols for architecture x86_64: "_strndup", referenced from: _yylex in ccl2332A.o ld: symbol(s) not found for architecture x86_64
почему
AFAIK, нет метода strndup в string.h или stdlib.h, попробуйте использовать strdup (), который, вероятно, вам нужен.Если вам действительно нужно указать длину, которую вы хотите выделить, вы можете сделать это, используя вместо этого malloc и memcpy.
strndup является расширением GNU и отсутствует в Mac OS X. Вам придется либо не использовать его, либо предоставлять какую-либо реализацию, например эту .
strndup
Если вам нужна реализация strndup, вы можете использовать эту.
char *strndup(char *str, int chars) { char *buffer; int n; buffer = (char *) malloc(chars +1); if (buffer) { for (n = 0; ((n < chars) && (str[n] != 0)) ; n++) buffer[n] = str[n]; buffer[n] = 0; } return buffer; }