The documentation for the start argument of charin() says:
You can give a start value to specify an explicit read position. This read position must be positive and within the bounds of the stream,
But, if the argument is postive and past the end of the stream, then the empty string is returned. The 'must be' within the bounds of the stream seems to indicate there would be an error if the position was past the end of the stream.