C 编程 , getc() , stdin , 文件重定向

C Programming , getc() , stdin , file redirection

我的任务是重定向一个文本文件并对其进行各种操作,一切正常,除了我有一个小问题:

所以读取输入的主要函数是getline1():

char* getline1(){
char *LinePtr = (char*)malloc(sizeof(char*)*LINE);
int i = 0;
for ( ; (*(LinePtr+i) = getc(stdin)) != '\n' ; i++){}
*(LinePtr+i) = '[=10=]';
return LinePtr;
}

它returns一个指向单行字符数组的指针,

所以我们知道换行符是 '\n' 字符,

我以前遇到的问题是当我像这样编写 getline1() 函数时:

for (int i = 0 ; Line[i] != '\n' ; i++){
Line[i] = getc(stdin);
}

从逻辑上讲它可能是真实的 getc() 是一个流函数,我看到网上的回答说这行不通,我不太明白为什么。

无论如何,最大的问题是我需要知道文本中有多少行,这样我才能停止读取值,或者从 getline1() 函数知道没有下一行了,我完成了。

我们需要考虑的事情: 1.only 需要使用 2.Im 使用 Linux Ubuntu 和 gcc 编译器 3.the ridirection 就像 ./运行

我也知道 stdin 是一个文件指针,没有找到可以帮助我的方法。

谢谢, 丹尼斯

除了 newline 字符之外,您还应该检查 EOF 信号,您还应该检查您的 index-1 总是小于 LINE 以避免溢出并为 NULL terminator.

保存 space
#define LINE 100

char *my_getline(void)
{
    size_t i = 0;
    char *str = NULL;
    int c = 0;

     if ((str = malloc(LINE)) == NULL)
     {
         fprintf(stderr,"Malloc failed");
         exit(EXIT_FAILURE);
     }

    while (i+1 < LINE && (c = getchar()) != EOF && c != '\n') /* Saving space for [=10=] */
    {
        str[i++] = c;
    }
    str[i] = '[=10=]';

    return str;
}

谢谢大家,我刚刚做了另一个函数来计算行数,这是唯一可用的懒惰选项:)

static void linecounter(){
FILE *fileptr;
int count = 0;
char chr;
fileptr = fopen("input.txt", "r");
chr = getc(fileptr);
while (chr != EOF){
if (chr == '\n'){count = count + 1;}
chr = getc(fileptr);}
fclose(fileptr);
count_lines = count;}