【发布时间】:2012-09-21 08:28:17
【问题描述】:
我需要一个函数/方法,它将接收一个 char 数组并将其设置为从标准输入读取的字符串。它需要返回读取的最后一个字符作为它的返回类型,所以我可以确定它是到达行尾还是文件尾标记。
这是我目前所拥有的,我有点基于 here 的代码
更新:我更改了它,但现在它只是在文本后按 Enter 时崩溃。我知道这种方式效率低下,并且 char 不是 EOF 检查的最佳选择,但现在我只是想让它返回字符串。我需要它以这种方式而不是其他方式来做到这一点。我需要字符串是行的确切长度,并返回一个值,即换行符或 EOF int,我相信它仍可用于 char 值。
这个程序是 C 而不是 C++
char getLine(char **line);
int main(int argc, char *argv[])
{
char *line;
char returnVal = 0;
returnVal = getLine(&line);
printf("%s", line);
free(line);
system("pause");
return 0;
}
char getLine(char **line) {
unsigned int lengthAdder = 1, counter = 0, size = 0;
char charRead = 0;
*line = malloc(lengthAdder);
while((charRead = getc(stdin)) != EOF && charRead != '\n')
{
*line[counter++] = charRead;
*line = realloc(*line, counter);
}
*line[counter] = '\0';
return charRead;
}
提前感谢您的帮助!
【问题讨论】:
-
你想要 C 还是 C++? 正确的 解决方案在每种语言中是完全不同的。另请注意,比读取的最后一个字符的值更有趣的是读取的字符数。您始终可以查看读取字符串中的该位置以确定字符是什么。此外,多个
realloc可能效率低下。 -
除了 H2CO3 所说的之外,您不是
returning 来自getLine的任何内容,尽管您声明它返回char。此外,您不应该为每个字符realloc,以合理大小的块来执行此操作。而line = realloc(line, counter);表示如果realloc失败,则丢失对内存的引用,使用临时保存realloc的结果并检查是否为NULL。