使用Clang和MinGW获得错误“对'strsep'的未定义引用”

时间:2019-10-04 23:57:54

标签: c clang mingw codeblocks strsep

以下是相关代码:

#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 个答案:

答案 0 :(得分:2)

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;
}

答案 1 :(得分:-1)

源文件应包含string.h:

 #include <string.h>

不确定是否可以解决链接错误(未定义的引用),但是可以。

根据我的Linux手册,可能需要:

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

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

如果所有其他方法均失败,请改用strtok(),也可以使用string.h中的const,它在许多方面都比较出色。 Strtok()不会修改第一个参数;适用于rbind字符串;并且不会覆盖定界符。