【发布时间】:2016-09-20 01:57:49
【问题描述】:
我想创建我自己版本的函数fgets()。
我试图这样做,但遇到了一些问题。
请让我知道我哪里出错了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *my_fgets(char my_string[], int bytes, const char *filename) {
int i = 0;
FILE *fp;
if ((fp = fopen(filename, "wb")) == NULL) {
fprintf(stderr,"Couldn't open the file");
return NULL;
}
while (sizeof(my_string) < bytes || my_string[i] != '\n')
my_string[i++] = getc(fp);
my_string[i] = '\0'; //adding NULL character at the end
/* using pointers
char *p;
for (p = array; p < array + bytes; p++)
*p = getc(fp);
*p = '\0'; */
fclose(fp);
return my_string;
}
int main() {
char my_string[15];
int n;
char *p;
p = my_fgets(my_string, sizeof(my_string), stdin);
printf("\n%s", my_string);
printf("\n%s", p);
return 0;
}
我的输出没有运行,它立即崩溃。任何帮助将不胜感激。
【问题讨论】:
-
标准
fgets()不打开文件;除非你受到导师的责难,否则你也不应该。 -
请注意,
while (sizeof(my_string) < bytes …)的循环是错误的。大小是指针中的字节数(可能是 4 或 8)并且不会改变。 -
my_string[i] != '\n': 值(my_string[i]) 尚未确定。 -
< bytes应该是< bytes - 1 -
第三个参数类型是
const char *filename但stdin是FILE*。