以下是相关代码:
#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'的隐式声明”。
答案 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
字符串;并且不会覆盖定界符。