digitalmars.D.learn - char* vs char[]
- jicman (42/42) Dec 16 2006 Feliz Navidad.
- Jarrett Billingsley (8/10) Dec 16 2006 The implicit conversion from D array to pointer has been removed in 0.17...
- jicman (6/16) Dec 16 2006 pointers now.
- novice2 (11/16) Dec 18 2006 in non-english Windows, for my big sorrow,
- Stewart Gordon (12/20) Dec 20 2006 The language of your version of Windows has no effect whatsoever on what...
- novice2 (11/15) Dec 21 2006 You are right. But.. i was not saw C libraries, working with utf8.
Feliz Navidad. I have not being reading the newsgroups, because of a few projects that I have going on. I am trying to get D into my company. It's not going to be easy, but I am positive. :-) So I have this module that gets some environment variables from the system. Here is some code: //------------------------------------------------------- extern (C) { char* getenv (char *); int putenv (char *); } char[] GetEnv(char[] pSymbol) { return std.string.toString(getenv(pSymbol)); } int PutEnv(char[] eVar, char[] eVal) { int i = putenv(eVar ~ "=" ~ eVal); return i; } char[] GetServerName() { // returns the Hostname on the local computer char[] sn = GetEnv("COMPUTERNAME"); return sn; } //------------------------------------------------------- I copied it from the group a few years ago. So, now, with this new .177 release I get this new error: ..\jic\libs\MyOSEnv.d(32): function jic.libs.MyOSEnv.getenv (char*) does not match parameter types (char[]) ..\jic\libs\MyOSEnv.d(32): Error: cannot implicitly convert expression (pSymbol) of type char[] to char* ..\jic\libs\MyOSEnv.d(37): function jic.libs.MyOSEnv.putenv (char*) does not match parameter types (char[]) ..\jic\libs\MyOSEnv.d(37): Error: cannot implicitly convert expression ((eVar) ~ "=" ~ (eVal)) of type char[] to char* How can I fix this? Will someone be willing to point me on the right direction? Thanks, josé
Dec 16 2006
"jicman" <jicman mail.com> wrote in message news:em2fih$1ks5$1 digitaldaemon.com...How can I fix this? Will someone be willing to point me on the right direction?The implicit conversion from D array to pointer has been removed in 0.177. All you need to do is add ".ptr" to convert from arrays to pointers now. Though since you have no way of knowing whether or not the passed-in strings are zero-terminated, you should use toStringz whenever passing D strings to C functions. return toString(getenv(toStringz(pSymbol)));
Dec 16 2006
== Quote from Jarrett Billingsley (kb3ctd2 yahoo.com)'s article"jicman" <jicman mail.com> wrote in message news:em2fih$1ks5$1 digitaldaemon.com...in 0.177.How can I fix this? Will someone be willing to point me on the right direction?The implicit conversion from D array to pointer has been removedAll you need to do is add ".ptr" to convert from arrays topointers now.Though since you have no way of knowing whether or not the passed-in stringsare zero-terminated, you should use toStringz whenever passing Dstrings toC functions. return toString(getenv(toStringz(pSymbol)));thanks.
Dec 16 2006
== Quote from jicman (jicman mail.com)'s articlein non-english Windows, for my big sorrow, imho, you need use std.windows.charset.toMBSz() to pass char[] from D to C function, and std.windows.charset.fromMBSz() to pass char[] from C function to D, in general case in _every char* in every call_ :( how i bored with utf8 while program small windows console utilitis : ( "invalid UTF8 sequence" on every time then i forget about fromMBSz() it is very tiresome!are zero-terminated, you should use toStringz whenever passing Dstrings toC functions. return toString(getenv(toStringz(pSymbol)));thanks.
Dec 18 2006
novice2 wrote: <snip>in non-english Windows, for my big sorrow,The language of your version of Windows has no effect whatsoever on what follows.imho, you need use std.windows.charset.toMBSz() to pass char[] from D to C function, and std.windows.charset.fromMBSz() to pass char[] from C function to D,Not quite. C functions can, as they please, work in any character encoding or not care at all about encoding. But if you're interfacing the OS, as is the case here, then you will need to make sure the data you're transmitting is in the right encoding.in general case in _every char* in every call_ :( how i bored with utf8 while program small windows console utilitis : (<snip> Check out smjg.libs.util.console in my utility library: http://pr.stewartsplace.org.uk/d/sutil/ Stewart.
Dec 20 2006
== Quote from Stewart Gordon (smjg_1998 yahoo.com)'s articleNot quite. C functions can, as they please, work in any character encoding or not care at all about encoding.You are right. But.. i was not saw C libraries, working with utf8. I just wanted to warn this topic author, that if we have C function prototype, using char* params, it is very very low probability, that this char* means utf8 string. In Windows at least. And i never saw utf8 functions in Windows API. He will have "invalid utf8 sequence" if will not convert to utf8 strings, that returned from C function. And i wanted to complain, that in D it is bored to interface with Windows :)Check out smjg.libs.util.console in my utility library: http://pr.stewartsplace.org.uk/d/sutil/Thank you!
Dec 21 2006