Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 13, 2007 std.string.toString(char*) little nuisance | ||||
---|---|---|---|---|
| ||||
A question, shouldn't be documented on the 'std.string.toString(char*)', that the d-string returned shares the same buffer as the input c-string? I've spent some (too much) time debugging to find out why the heck all my strings were messing up... now I know. Mentioning this on the docs could have been of so much help, it's not that obvious! Regards, -- Tom; |
March 13, 2007 Re: std.string.toString(char*) little nuisance | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tom | Tom wrote: > A question, > > shouldn't be documented on the 'std.string.toString(char*)', that the d-string returned shares the same buffer as the input c-string? > > I've spent some (too much) time debugging to find out why the heck all my strings were messing up... now I know. > > Mentioning this on the docs could have been of so much help, it's not that obvious! I think it's pretty obvious if you read the first paragraph of http://www.digitalmars.com/d/phobos/std_string.html, and consider that a char* c-string is also a 'string' as described in that bit of text. It's not modified, so a slice of the original is returned (as a D char[]). Remember: don't just read the function description, the module description may contain information that applies to all (or a lot of) the functions in a module. |
March 13, 2007 Re: std.string.toString(char*) little nuisance | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | Frits van Bommel escribió: > Tom wrote: >> A question, >> >> shouldn't be documented on the 'std.string.toString(char*)', that the d-string returned shares the same buffer as the input c-string? >> >> I've spent some (too much) time debugging to find out why the heck all my strings were messing up... now I know. >> >> Mentioning this on the docs could have been of so much help, it's not that obvious! > > I think it's pretty obvious if you read the first paragraph of http://www.digitalmars.com/d/phobos/std_string.html, and consider that a char* c-string is also a 'string' as described in that bit of text. It's not modified, so a slice of the original is returned (as a D char[]). It wasn't so obvious for me. I knew the COW thing for char[] but didn't guess that a char* was considered a string in this matters. > Remember: don't just read the function description, the module description may contain information that applies to all (or a lot of) the functions in a module. Uhmm, I know :). Not reading wasn't the issue. It was disregarding the fact that in D, a char* is also considered a string. Regards, -- Tom; |
March 13, 2007 Re: std.string.toString(char*) little nuisance | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tom | Tom wrote: > Frits van Bommel escribió: >> Tom wrote: >>> shouldn't be documented on the 'std.string.toString(char*)', that the d-string returned shares the same buffer as the input c-string? [snip] >> >> I think it's pretty obvious if you read the first paragraph of http://www.digitalmars.com/d/phobos/std_string.html, and consider that a char* c-string is also a 'string' as described in that bit of text. It's not modified, so a slice of the original is returned (as a D char[]). > > It wasn't so obvious for me. I knew the COW thing for char[] but didn't guess that a char* was considered a string in this matters. [snip] > Not reading wasn't the issue. It was disregarding the fact that in D, a char* is also considered a string. Well, char* isn't typically considered a string in D, but in this case[1] it's treated as one[2]. Also, you clearly referred to it as a (c-)string in your original post ;). [1]: And AFAIK only in this case, outside of *.c.* modules. Well, perhaps you could also count the return value of toStringz... [2]: The description of toString(char*): "Convert C-style 0 terminated _string_ s to char[] string." (emphasis added) |
Copyright © 1999-2021 by the D Language Foundation