Returning dynamic array from the function?
rikki cattermole
rikki at cattermole.co.nz
Sat Sep 8 10:05:31 UTC 2018
On 08/09/2018 9:46 PM, SuperPrower wrote:
> On Saturday, 8 September 2018 at 09:36:21 UTC, rikki cattermole wrote:
>> We're going to need to see a minified version of the code to see what
>> you're doing.
>
> Sure, here it is:
>
> ```
> auto getBoards()
> {
> string[] boardList;
>
> auto url = baseUrl ~ "/api/v2/boards";
> auto http = HTTP(url);
> http.method = HTTP.Method.get;
> http.onReceive = (ubyte[] data) {
> auto content = cast(string) data[];
auto content = cast(string)(data.dup);
> boardList = strip(content, "[", "]").split(",");
> foreach (ref b; boardList) {
> b = strip(b, `"`);
> }
>
> return data.length;
> };
>
> http.perform();
> writeln(boardList);
> return boardList;
> }
> ```
>
> This is a member function of some class. It doesn't really have any
> fields, so I left if out. In it, I use curl library to getch some data
> and split it. Next, I try to use this function to get this list:
>
> ```
> Fetcher fetcher = new Fetcher;
>
> auto boards = fetcher.getBoards();
> writeln(boards);
> ```
> I printed array twice: inside the function and after return. Here is the
> output:
> ```
> ["a", "burg", "cyb", "d", "lain", "mu", "new", "tech", "test", "u", "v",
> "all"]
> [x"F9"c, x"FA 01 00 00"c, "\0\0\0", "d", "lain", "mu", "new", "tech",
> "test", "u", "v", "all"]
> ```
>
> As you can see, when outside of the funtion, first few elements of the
> array contain garbage. I would like to know both why this happens and
> how do I avoid it (i.e. what is the correct way of returning dynamic
> array).
onReceive:
"The event handler that receives incoming data. Be sure to copy the
incoming ubyte[] since it is not guaranteed to be valid after the
callback returns."
It could be a buffer on the stack, either way, .dup it before you cast.
More information about the Digitalmars-d-learn
mailing list