Path: csiph.com!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.lang.c Subject: Re: sizeof environment variables array = 1? Date: Thu, 08 Jun 2017 12:10:06 -0700 Organization: None to speak of Lines: 56 Message-ID: References: <878tl2v5ge.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: mx02.eternal-september.org; posting-host="014809c4f49cfafbe03afa6d23552d79"; logging-data="20541"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/XBGEJB6U98ZyQktN8S/nz" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) Cancel-Lock: sha1:grphdkxySAGxynHxwS4VtRnKl70= sha1:R4afRVPWh8aV0YxiSaCiv057opM= Xref: csiph.com comp.lang.c:111857 DFS writes: > On 6/8/2017 12:43 PM, Lew Pitcher wrote: >> but, I'd probably write it something like... >> >> int envars; >> >> /* advance through env[] array, looking for NULL pointer */ >> for (envars = 0; env[envars] != NULL; ++envars) {/*NOP*/} >> >> printf("%d\n",envars); > > > I just want to extract the Path env variable. > This code hangs. Am I misusing strncpy? > > int envars=0; > char tmp[5]; > for (envars = 0; env[envars] != NULL; ++envars) > { > strncpy(tmp,env[envars],5); > tmp[5]='\0'; Apart from the fact that you're assigning a value to the nonexisting tmp[5] (which has already been covered), creating a copy of the initial portion of the string is unnecessary. Just use strncmp(). And be careful with strncpy(); it's not just a "safer" version of strcpy(). (Usually the best way to be careful with it is to avoid using it.) > if (strcmp(tmp,"Path=")==0) > { > printf("%d. %s\n", envars+1, env[envars]); > break; > } > } On Unix-like systems, there's an environment variable named "PATH", not "Path". I'm not sure about Windows. As I recall it does use a similarly named environment variable, but a lot of things in Windows are case-insensitive. I don't know whether you can rely on it being called "Path" rather than, say, "path" or PATH". And if your goal is to get the value of a particular environment variable, I recommend the standard getenv() function. -- Keith Thompson (The_Other_Keith) kst-u@mib.org Working, but not speaking, for JetHead Development, Inc. "We must do something. This is something. Therefore, we must do this." -- Antony Jay and Jonathan Lynn, "Yes Minister"