Что не так с strndup? - PullRequest
       60

Что не так с strndup?

3 голосов
/ 19 мая 2011

Я пишу парсер, используя 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

почему

Ответы [ 3 ]

5 голосов
/ 19 мая 2011

AFAIK, нет метода strndup в string.h или stdlib.h, попробуйте использовать strdup (), который, вероятно, вам нужен.Если вам действительно нужно указать длину, которую вы хотите выделить, вы можете сделать это, используя вместо этого malloc и memcpy.

3 голосов
/ 19 мая 2011

strndup является расширением GNU и отсутствует в Mac OS X. Вам придется либо не использовать его, либо предоставлять какую-либо реализацию, например эту .

0 голосов
/ 07 января 2017

Если вам нужна реализация 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;
}
...