reading only the first character in a line on the SD card

Here is a sketch that illustrates stack usage.

uint16_t f() {
  char a[256];
  Serial.println(FreeRam());
  // make sure compiler allocates a[]
  for (int i = 0; i < 255; i++) a[i] = i;
  uint16_t r = 0;
  for (int i = 0; i < 255; i++) r += a[i];
  return r;
}
//----------------------------------------------------------------
void setup() {
  Serial.begin(9600);
  Serial.println(FreeRam());
  Serial.print(f());
  Serial.println(" f return value");
  Serial.println(FreeRam());
}
void loop() {}
//------------------------------------------------------------------------------
#ifdef __arm__
// should use uinstd.h to define sbrk but Due causes a conflict
extern "C" char* sbrk(int incr);
#else  // __ARM__
extern char *__brkval;
extern char __bss_end;
#endif  // __arm__

/** Amount of free RAM
 * \return The number of free bytes.
 */
int FreeRam() {
  char top;
#ifdef __arm__
  return &top - reinterpret_cast<char*>(sbrk(0));
#else  // __arm__
  return __brkval ? &top - __brkval : &top - &__bss_end;
#endif  // __arm__
}

It prints the following:

1824
1563
65409 f return value
1824

So, 1824 bytes of RAM were available before the call to f(). 1563 bytes were available while f() was executing so f() used 261 bytes of stack. 1824 bytes was available after f() returned.