我正在尝试在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 我添加了标题。我还想提一下,我在这个网站上看到了一些对我不起作用的帖子。
答案 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);
}