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;}
我的任务是重定向一个文本文件并对其进行各种操作,一切正常,除了我有一个小问题:
所以读取输入的主要函数是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 我也知道 stdin 是一个文件指针,没有找到可以帮助我的方法。 谢谢,
丹尼斯
除了 newline
字符之外,您还应该检查 EOF
信号,您还应该检查您的 index-1
总是小于 LINE
以避免溢出并为 NULL terminator
.
#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;}