Получение ошибки «неопределенная ссылка на« strsep »» с помощью Clang и MinGW - PullRequest
1 голос
/ 05 октября 2019

Вот соответствующий код:

#define _GNU_SOURCE
#define BUFFER_SIZE 1024

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    while (1) {
        char* buffer;
        size_t size = 32;
        size_t line;
        line = getline(&buffer,&size,stdin);
        printf("%s\n",buffer);

        int commandList[line];
        int count = 0;
        while (strsep(buffer," ")) {
            commandList[count] = strsep(buffer," ");
            count++;
        }
    }
}

Я использую кодовые блоки с minGW и Clang.

Я знаю, что мой код не выполняет то, что предполагается намомент, но я почти уверен, что он должен хотя бы скомпилироваться. Я также получаю предупреждение: "неявное объявление функции 'strsep'".

Ответы [ 2 ]

2 голосов
/ 05 октября 2019

strsep тривиально реализовать самостоятельно

#include <string.h>

char *strsep(char **stringp, const char *delim) {
    char *rv = *stringp;
    if (rv) {
        *stringp += strcspn(*stringp, delim);
        if (**stringp)
            *(*stringp)++ = '\0';
        else
            *stringp = 0; }
    return rv;
}
0 голосов
/ 05 октября 2019

Исходный файл должен содержать string.h:

 #include <string.h>

Не уверен, что это исправит ошибку ссылки (неопределенная ссылка), но это может произойти.

Согласно моему руководству по Linux, может потребоваться:

 #define _DEFAULT_SOURCE
    (...)
 #include <string.h>

или

 #define _BSD_SOURCE
    (...)
 #include <string.h>

Если все остальное не помогло, используйте вместо него strtok(), также из string.h, который во многих отношениях превосходит. Strtok () не изменяет первый аргумент;работает на const строках;и он не перезаписывает разделитель.

...