codeblocks和C未定义的getline引用

时间:2014-12-09 00:35:55

标签: c getline

我正在尝试在C中使用带有代码块的getline,但我无法让它在我的机器上运行。代码也适用于我也可以访问的服务器,但是我的wifi访问受限,所以我需要在我的机器上工作。我使用gcc编译器运行Windows 8.1 64位和代码块13.12。

这是使用getline的三个代码段之一,删除了一些额外的变量。

 #include <stdio.h>
 #include <stdlib.h> // For error exit()
 #include <string.h>


 char *cmd_buffer = NULL;
 size_t cmd_buffer_len = 0, bytes_read = 0;
 size_t words_read; // number of items read by sscanf call
 bytes_read = getline(&cmd_buffer, &cmd_buffer_len, stdin);

 if (bytes_read == -1) {
        done = 1; // Hit end of file
 }

错误非常简单:

undefined reference to 'getline'

我怎样才能让它发挥作用?

EDIT 我添加了标题。我还想提一下,我在这个网站上看到了一些对我不起作用的帖子。

1 个答案:

答案 0 :(得分:4)

也许这项工作。

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

ssize_t getdelim(char **linep, size_t *n, int delim, FILE *fp){
    int ch;
    size_t i = 0;
    if(!linep || !n || !fp){
        errno = EINVAL;
        return -1;
    }
    if(*linep == NULL){
        if(NULL==(*linep = malloc(*n=128))){
            *n = 0;
            errno = ENOMEM;
            return -1;
        }
    }
    while((ch = fgetc(fp)) != EOF){
        if(i + 1 >= *n){
            char *temp = realloc(*linep, *n + 128);
            if(!temp){
                errno = ENOMEM;
                return -1;
            }
            *n += 128;
            *linep = temp;
        }
        (*linep)[i++] = ch;
        if(ch == delim)
            break;
    }
    (*linep)[i] = '\0';
    return !i && ch == EOF ? -1 : i;
}
ssize_t getline(char **linep, size_t *n, FILE *fp){
    return getdelim(linep, n, '\n', fp);
}