C 将getline与全局变量一起使用
我会读几行文字,所以我想把它保存在一个全局变量中。我做了这样一件事:C 将getline与全局变量一起使用,c,getline,C,Getline,我会读几行文字,所以我想把它保存在一个全局变量中。我做了这样一件事: #include <stdbool.h> #include <stdio.h> static char currentLine[MAX_LINE_LENGTH]; static bool readNextLine(void) { return getline(¤tLine, NULL, stdin); } 我做错了什么?为变量使用正确的类型并正确使用 第一个参数必须是指
#include <stdbool.h>
#include <stdio.h>
static char currentLine[MAX_LINE_LENGTH];
static bool readNextLine(void)
{
return getline(¤tLine, NULL, stdin);
}
我做错了什么?为变量使用正确的类型并正确使用
- 第一个参数必须是指向
的指针char
- 第二个参数不能为
NULL
- 正确使用返回值来判断调用是否成功
#define _GNU_SOURCE
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
static char *currentLine = NULL;
static bool readNextLine(void)
{
size_t dummy = 0;
free(currentLine);
currentLine = NULL;
return getline(¤tLine, &dummy, stdin) >= 0;
}
定义GNU源
#包括
#包括
#包括
静态字符*currentLine=NULL;
静态bool readNextLine(无效)
{
假人尺寸=0;
自由(电流线);
currentLine=NULL;
返回getline(¤tLine,&dummy,stdin)>=0;
}
为变量使用正确的类型并正确使用
- 第一个参数必须是指向
的指针char
- 第二个参数不能为
NULL
- 正确使用返回值来判断调用是否成功
#define _GNU_SOURCE
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
static char *currentLine = NULL;
static bool readNextLine(void)
{
size_t dummy = 0;
free(currentLine);
currentLine = NULL;
return getline(¤tLine, &dummy, stdin) >= 0;
}
定义GNU源
#包括
#包括
#包括
静态字符*currentLine=NULL;
静态bool readNextLine(无效)
{
假人尺寸=0;
自由(电流线);
currentLine=NULL;
返回getline(¤tLine,&dummy,stdin)>=0;
}
getline(¤tLine,NULL,stdin)代码>需要处理两件事:分配内存的char*
和类型size\u t
的大小。因此,需要传递这两个项目的地址。以下代码失败,因为getline()
无法更改currentLine[]
的地址,并且也没有分配该地址
char currentLine[MAX_LINE_LENGTH];
getline(¤tLine, NULL, stdin); // fails
反而
#include <stdbool.h>
#include <stdio.h>
static char *currentLine = NULL;
static size_t currentLineSize = 0;
// true when a line is read
static bool readNextLine(void) {
return getline(¤tLine, ¤tLineSize, stdin) >= 0;
}
getline(¤tLine,NULL,stdin)代码>需要处理两件事:分配内存的char*
和类型size\u t
的大小。因此,需要传递这两个项目的地址。以下代码失败,因为getline()
无法更改currentLine[]
的地址,并且也没有分配该地址
char currentLine[MAX_LINE_LENGTH];
getline(¤tLine, NULL, stdin); // fails
反而
#include <stdbool.h>
#include <stdio.h>
static char *currentLine = NULL;
static size_t currentLineSize = 0;
// true when a line is read
static bool readNextLine(void) {
return getline(¤tLine, ¤tLineSize, stdin) >= 0;
}
man getline:如果*lineptr为NULL,则getline()将分配一个缓冲区来存储该行,该缓冲区应由用户程序释放。(在本例中,*n中的值被忽略。)或者,在调用getline()之前,*lineptr可以包含一个指向malloc(3)分配的缓冲区*n字节大小的指针。
TL;DR:你不能这样做。将错误的类型传递给getline
,这就是为什么会出现错误。指向指针E的指针和指向数组的指针都是不同的。man getline:如果*lineptr为NULL,则getline()将分配一个缓冲区来存储该行,该缓冲区应由用户程序释放。(在本例中,*n中的值被忽略。)或者,在调用getline()之前,*lineptr可以包含一个指向malloc(3)分配的缓冲区*n字节大小的指针。
TL;DR:你不能这样做。将错误的类型传递给getline
,这就是为什么会出现错误。指向指针E的指针和指向数组的指针都是不同的。