Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #147710
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: What are the odds? (a continuation of One works ...) |
| Date | 2019-11-07 14:27 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <qq1649$vvi$1@dont-email.me> (permalink) |
| References | (4 earlier) <voGwF.93833$vD7.57507@fx06.iad> <g4g6se5u1ggsmecioggck2k7ve59pfdbbp@4ax.com> <2VHwF.97943$_i.39059@fx25.am4> <ln36f05q6t.fsf@kst-u.example.com> <h2hhf7Fq967U11@mid.individual.net> |
On 07/11/2019 04:30, Ian Collins wrote: > On 07/11/2019 16:19, Keith Thompson wrote: >> Bart <bc@freeuk.com> writes: >>> On 06/11/2019 22:23, Barry Schwarz wrote: >>>> On Wed, 6 Nov 2019 15:52:28 -0500, DFS <nospam@dfs.com> wrote: >>>>> char charset[62] = >>>>> "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; >>>> After numerous examples in your comp.lang.c posts (where I have >>>> redirected this response since we are not discussing the odds any >>>> more) of calculating charsetLen correctly, you have chosen to use a >>>> different method. You have tried to pass charset to strlen in >>>> complete violation of the requirements that function imposes. >>>> >>>> It is not sufficient to simply pass a pointer to char to strlen. >>>> strlen requires that the pointer actually point to a string. In order >>>> for an array of char to contain a string, the array must contain at >>>> least one '\0' to properly terminate the string. charset does not. >>> >>> A simple fix is to get rid of the '62': >>> >>> char charset[] = >>> "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; >> >> The only thing the code does that depends on charset containing a >> valid string is the single (incorrect) call to strlen(). If you >> replace `strlen(charset)` by `sizeof charset` then there's no need >> to nul-terminate it. > Or do what I did in my C++ version and use a compile time constant for > the size. That way the compile will break if you miss out a character. > C++ will complain if the initialiser is too long (as it is in this case, but not if it is too short. (A compiler may provide a warning, of course.) I think the best way to ensure such arrays are the size you expect are to omit the size in the definition, then use a static assertion to check it: const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; _Static_assert(sizeof(charset) == 63, "Charset should be 62 chars plus terminating zero"); If you have got your alphabet wrong, you'll get a compile-time error.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Re: What are the odds? (a continuation of One works ...) Barry Schwarz <schwarzb@delq.com> - 2019-11-06 14:23 -0800
Re: What are the odds? (a continuation of One works ...) Bart <bc@freeuk.com> - 2019-11-06 22:35 +0000
Re: What are the odds? (a continuation of One works ...) luser droog <luser.droog@gmail.com> - 2019-11-06 17:09 -0800
Re: What are the odds? (a continuation of One works ...) Keith Thompson <kst-u@mib.org> - 2019-11-06 19:19 -0800
Re: What are the odds? (a continuation of One works ...) Ian Collins <ian-news@hotmail.com> - 2019-11-07 16:30 +1300
Re: What are the odds? (a continuation of One works ...) Bart <bc@freeuk.com> - 2019-11-07 10:59 +0000
Re: What are the odds? (a continuation of One works ...) David Brown <david.brown@hesbynett.no> - 2019-11-07 14:27 +0100
Re: What are the odds? (a continuation of One works ...) DFS <nospam@dfs.com> - 2019-11-06 18:09 -0500
Re: What are the odds? (a continuation of One works ...) Keith Thompson <kst-u@mib.org> - 2019-11-06 19:26 -0800
Re: What are the odds? (a continuation of One works ...) Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-11-07 11:57 +0000
csiph-web