我很困惑。
我查看了链接,阅读了描述,这是一个很好的实用程序。
但是,您是说您根本无法将此函数重写为规范吗?规范似乎很清楚,
这里:
/* This code is public domain -- Will Hartung 4/9/09 */
#include <stdio.h>
#include <stdlib.h>
size_t getline(char **lineptr, size_t *n, FILE *stream) {
char *bufptr = NULL;
char *p = bufptr;
size_t size;
int c;
if (lineptr == NULL) {
return -1;
}
if (stream == NULL) {
return -1;
}
if (n == NULL) {
return -1;
}
bufptr = *lineptr;
size = *n;
c = fgetc(stream);
if (c == EOF) {
return -1;
}
if (bufptr == NULL) {
bufptr = malloc(128);
if (bufptr == NULL) {
return -1;
}
size = 128;
}
p = bufptr;
while(c != EOF) {
if ((p - bufptr) > (size - 1)) {
size = size + 128;
bufptr = realloc(bufptr, size);
if (bufptr == NULL) {
return -1;
}
}
*p++ = c;
if (c == '\n') {
break;
}
c = fgetc(stream);
}
*p++ = '\0';
*lineptr = bufptr;
*n = size;
return p - bufptr - 1;
}
int main(int argc, char** args) {
char *buf = NULL; /*malloc(10);*/
int bufSize = 0; /*10;*/
printf("%d\n", bufSize);
int charsRead = getline(&buf, &bufSize, stdin);
printf("'%s'", buf);
printf("%d\n", bufSize);
return 0;
}
15 分钟,我已经 10 年没有写过 C 语言了。它轻微破坏了 getline 合同,因为它只检查 lineptr 是否为 NULL,而不是 NULL 和 n == 0。如果你愿意,你可以修复它。(另一种情况对我来说没有多大意义,我想在那种情况下你可以返回 -1。)
将 '\n' 替换为变量以实现“getdelim”。
人们还写代码吗?