Can we use strings with scanf?

Rempas rempas at tutanota.com
Mon Jan 25 17:38:21 UTC 2021


On Monday, 25 January 2021 at 10:33:14 UTC, Mike Parker wrote:
> On Monday, 25 January 2021 at 09:16:11 UTC, Rempas wrote:
>> For printf() we can use this format `"%.*s", cast(int)s 
>> s.length, s.ptr`. When trying to use the same for scanf(), it 
>> says that this specifier is invalid.
>
> The * has a different meaning for scanf than for printf ([1] vs 
> [2]).
>
> There's also the issue that a string is immutable(char)[].
>
> If you really, really, really, must use scanf:
>
> ```
> char[bufSize] buf;
> scanf("%s", buf.ptr);
> ```
>
> But please don't. This is D, not 1990s C.
>
> [1] https://www.cplusplus.com/reference/cstdio/scanf/
> [2] https://www.cplusplus.com/reference/cstdio/printf/

Thanks! Actually for some reason. It won't accept a char[size]. I 
created a heap allocated (with pureFree and pureMalloc) chrar*, 
then used fgets() and created an empty string and looped through 
the result adding one by one character until the '\n' which is 
not included.


More information about the Digitalmars-d-learn mailing list