我需要一個函數/方法,它將接受一個char數組並將其設置爲從stdin讀取的字符串。它需要返回讀取的最後一個字符作爲它的返回類型,所以我可以確定它是否到達一行的結尾或文件標記的結尾。自定義getLine()函數c
這裏是我到目前爲止,我有種基於它關閉的代碼here
更新:我改變了它,但現在它只是崩潰後擊中後的文本輸入。我知道這種方式效率低下,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所說的內容之外,儘管你聲明它返回一個'char',但你不會從'getLine'返回任何東西。此外,你不應該爲每個角色「重新分配」,而是以大小合理的塊來完成。 'line = realloc(line,counter);''表示如果'realloc'失敗,則失去對內存的引用,使用臨時文件保存'realloc'的結果並檢查它是否爲'NULL'。 –