Path: csiph.com!feeder.erje.net!1.eu.feeder.erje.net!weretis.net!feeder4.news.weretis.net!feeder5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Lars Erdmann Newsgroups: comp.os.os2.programmer.misc Subject: Re: C: How to convert a \0 char into a dot for printf output? Date: Fri, 18 May 2018 21:29:34 +0200 Organization: solani.org Lines: 42 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: solani.org 1526671778 15849 eJwFwYkBgDAIA8CVCiSpjoM8+4/gHUOmuhAFLvcARslVzAf3HcC/GK8+seuSwXq2FBPp2T8APhDG (18 May 2018 19:29:38 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Fri, 18 May 2018 19:29:38 +0000 (UTC) User-Agent: Mozilla/5.0 (OS/2; Warp 4.5; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 X-NNTP-Posting-Host: eJwFwYERACEIA7CVfGpbGEf02H+ETwh9ut6iNodTNZ32WV5ix8gT6AKFiING8h2+usZVmj8KlhBb In-Reply-To: X-User-ID: eJwFwYEBwDAEBMCVCI+M46P2H6F3sNB46YFwLNalHj+pEbk3a7y4Y4FcFeTpbaHxHc7GaPMHF/IRhg== Cancel-Lock: sha1:jVT5/RF/1Z4SLYIqBTIK10lbyGk= Xref: csiph.com comp.os.os2.programmer.misc:1613 On 18.05.18 19.34, Andreas Schnellbacher wrote: > On 18.05.18 19:26, James Moe wrote: > >> On 05/18/2018 09:30 AM, Andreas Schnellbacher wrote: >> >>> I've tried to write a function that should convert each zero char into a >>> dot. The following function doesn't work and I don't know why. >> >> It is because you are removing the string terminator. >> You need to add a terminator to each string where you replace the >> terminator so that downstream string processing works as expected. > > Thanks. I see, that makes sense. Sure, that's why in another function > double-zero-terminated strings exist. > That's not really true. In C, if you define a string like "String1\0String2\0" then in fact, the C compiler will create a string that adds an additional zero terminator after this string. Just as it does for any string. What you really need to do is check for the DOUBLE occurrence of a zero terminator in order to find the end of the string. Something like this (untested): static PSZ _zerotodot( PSZ pszString) { PSZ p = pszString; if (p != NULL) { while ((*p != 0) || (*(p+1) != 0)) // !a || !b == !(a && b) { if (*p == 0) *p = '.'; p++; } *p = '.'; // treat the very last "visible" zero terminator } return pszString; // you want to return the conv. string, don't you ? }