On Tuesday, 6 December 2022 at 23:41:09 UTC, H. S. Teoh wrote:
On Tue, Dec 06, 2022 at 11:07:32PM +0000, johannes via Digitalmars-d-learn wrote:
//-- the result should be f.i. "the sun is shining"
//-- sqlite3_column_text returns a constant char* a \0 delimited c-string
printf("%s\n",sqlite3_column_text(res, i));
writeln(sqlite3_column_text(res, i));
[...]

In D, strings are not the same as char*. You should use std.conv.fromStringZ to convert the C char* to a D string.


Well, if we think the other way around, in the example below we'd copy string, right?

```d
void stringCopy(Chars)(string source,
                    ref Chars target)
{
  import std.algorithm : min;
  auto len = min(target.length - 1,
                 source.length);
  target[0 .. len] = source[0 .. len];
  target[len] = '\0';
}

import std.stdio;
void main()
{ //              |----- 21 chars ------| |-- 8 --|
  string sample = "bu bir deneme olmakta\0gizlimi?";
  char[30] cTxt; // 29 + 1'\0'

  sample.stringCopy = cTxt;  // disappeared ? char
  cTxt.writeln;              // appeared 28 chars

  printf("%s\n", cTxt.ptr);  // appeared 21 chars
  printf("%s\n", &cTxt[22]); // appeared 7 chars
  writefln!"%(%02X %)"(cast(ubyte[])cTxt);
}
```

Attention, the method used is again a slicing...

SDB@79

Reply via email to