printf, writeln, writefln

Salih Dincer salihdb at hotmail.com
Thu Dec 8 16:21:57 UTC 2022


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 at 79


More information about the Digitalmars-d-learn mailing list