On Wednesday, 29 October 2014 at 21:19:25 UTC, Peter Alexander wrote:
You need to take a slice of the buffer:

char[] buf = Input[];
readln(buf);
// line now in buf

The reason for this is because you need to know where the string ends. If you just passed in Input, how would you know how long the line read was?

Thanks, that solves the problem. I guess what confuses me is that Input isn't a slice, or at least not implicitly convertible to one.

Also, I've tried using Input[] directly at the callsite but apparently that would be an rValue, and D doesn't do rValues yet.

So here's a simple solution to reading a line using a fixed stack array:

    char[4096] Input;
char[] InputSlice; // actual slice of input'd text (instead of full 4K)
    size_t NumChars;

    while (NumChars == 0)
    {
// readln(buf) requires a slice. Input isn't converted to one,
        // and readln() requires an rvalue for a buffer:
        char[] buf = Input[];
        NumChars = readln(buf);
// Set InputSlice to range of text that was input, minus linefeed:
        InputSlice = chomp(buf[0 .. NumChars]);
        // Empty line?
        if (InputSlice == "")
            NumChars = 0;
    }

Thanks all for your help

Reply via email to