string to char array?

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 4 15:28:49 PDT 2015


On Thursday, 4 June 2015 at 21:35:40 UTC, Kyoji Klyden wrote:
> On Thursday, 4 June 2015 at 03:25:24 UTC, ketmar wrote:
>> On Wed, 03 Jun 2015 11:59:56 +0000, Kyoji Klyden wrote:
>>
[...]
>>> what
>>> exactly is char**? Is it pointing to the first char of the 
>>> first string
>>> in an array?
>>
>> it's a pointer to array of pointers to first chars of strings. 
>> ;-)
>
> Ohh okay. So this is how the function is able to take multiple 
> strings then..
> How was I supposed to know it was an array though? Is it 
> because it was a string type pointer?

Generally, a `char**` is a pointer to a pointer to a char. There 
may be more pointers to chars behind the pointed-to one. And 
there may be more chars behind the pointed-to ones. You can't 
know just from the type. You have to read the documentation of 
the involved functions for the specifics.

> Also does D primarily use explicit length field strings?

I'm not sure if I understand you right, but yes, D arrays carry 
their length. And D `string`s are arrays. You should encounter 
things like `char**` pretty much only when talking to C code.

By the way, there are subtly different meanings of "array" and 
"string" which I hope you're aware of, but just to be sure:
"array" can refer to D array types, i.e. a pointer-length pair, 
e.g. char[]. Or it can refer to the general concept of a 
contiguous sequence of elements in memory.
And as a special case, "string" can refer to D's `string` type, 
which is an alias for `immutable(char)[]`. Or it can refer to a 
contiguous sequence of characters in memory.
And when ketmar writes: "it's a pointer to array of pointers to 
first chars of strings", then "array" and "string" are meant in 
the generic way, not in the D-specific way.


More information about the Digitalmars-d-learn mailing list