| Deutsch English Français Italiano |
|
<vorv4r$emcm$2@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: James Kuyper <jameskuyper@alumni.caltech.edu> Newsgroups: comp.lang.c Subject: Re: Buffer contents well-defined after fgets() reaches EOF ? Date: Sun, 16 Feb 2025 01:04:11 -0500 Organization: A noiseless patient Spider Lines: 36 Message-ID: <vorv4r$emcm$2@dont-email.me> References: <vo9g74$fu8u$1@dont-email.me> <vo9hlo$g0to$1@dont-email.me> <vo9khf$ggd4$1@dont-email.me> <vobf3h$sefh$2@dont-email.me> <vobjdt$t5ka$1@dont-email.me> <vobkd5$t7np$1@dont-email.me> <20250210124911.00006b31@yahoo.com> <86ldu9zxkb.fsf@linuxsc.com> <20250214165108.00002984@yahoo.com> <20250214085627.815@kylheku.com> <voo6sc$3k640$1@dont-email.me> <20250215192911.0000793d@yahoo.com> <vorm2j$eag8$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Sun, 16 Feb 2025 07:04:30 +0100 (CET) Injection-Info: dont-email.me; posting-host="3aa6c45380cd33b15659a8290c61f2a4"; logging-data="481686"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX197IUa+w2lfQHv35sUvw757tOfw8kyqR4A=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:hHBLhhEdEG21jABSaTyq81ehVLk= In-Reply-To: <vorm2j$eag8$1@dont-email.me> Content-Language: en-US Bytes: 2910 On 2/15/25 22:29, Janis Papanagnou wrote: > On 15.02.2025 18:29, Michael S wrote: >> On Fri, 14 Feb 2025 20:51:38 +0100 >> Janis Papanagnou <janis_papanagnou+ng@hotmail.com> wrote: >>> >>> Actually, in the same code, I'm also using the strtok() function >> >> strtok() is one of the relatively small set of more problemetic >> functions in C library that are not thread-safe. > > I know that it's not thread-safe. (You can't miss that information > if you look up the man page to inspect the function interface.) > >> If you only care about POSIX target, the I'd reccomend to avoid strtok >> and to use strtok_r(). If you cannot assume POSIX, but can assume C2011 or later, you might be able to use strtok_s() instead. You need to add #ifdef __STDC_LIB_EXT1__ #define __STDC_WANT_LIB_EXT1__ 1 // strtok_s() will be declared in <string.h> #endif #include <string.h> > But since I don't use threads - neither here nor did I ever needed > them generally in my "C" contexts - that's unnecessary. Isn't it? No. What makes strtok() problematic can come up without any use of threads. Consider for the moment a bug I had to investigate. A function that was looping through strtok() calls to parse a string called a utility function during each pass through the loop. The utility function also called strtok() in a loop to parse an entirely different string for a different purpose. Exercise for the student: figure out what the consequences were.