Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #112830
| Subject | Re: Warning: assignment from incompatible pointer type |
|---|---|
| Newsgroups | comp.lang.c |
| References | (4 earlier) <oicier$fvg$2@dont-email.me> <oidlf0$gne$1@dont-email.me> <oif9q6$s7i$2@dont-email.me> <lIM2B.59754$OJ2.17773@fx37.am4> <87k24489ep.fsf@bsb.me.uk> |
| From | bartc <bc@freeuk.com> |
| Message-ID | <uLP2B.31163$9u1.10034@fx06.am4> (permalink) |
| Organization | virginmedia.com |
| Date | 2017-06-22 14:38 +0100 |
On 22/06/2017 14:00, Ben Bacarisse wrote:
> bartc <bc@freeuk.com> writes:
>
>> On 22/06/2017 03:30, DFS wrote:
> <snip>
>>> But python is easy to learn, and has a big bunch of libraries. And I
>>> love the python list comprehension.
>>>
>>> One line to count the unique characters in a string.
>>>
>>> msg = "Now is the time for all good men to come to the aid of their country"
>>> for t in sorted(set([(x,msg.count(x)) for x in msg])):
>>> print t[0],t[1]
>
> <snip>
>> One advantage of a language like C is that it forces you to work more
>> efficiently. Here's the same task in C:
>
> No the C you show is for slightly a different task, but it's different
> in a way that matters to how good C is at doing it. Python (at least
> modern Python) is Unicode-aware actual letters are counted, not just
> bytes. I'm sure the C code for the same task would still beat Python
> hands down, but it would require a little more fiddling about.
So the C also requires you to make decisions about how in-depth a
solution needs to be. If that information is available, then again you
can choose a more efficient solution. Such as working only with 8-bit
characters, or with 7-bit ASCII.
(With a string representing UTF8, then the ASCII counts are represented
properly, but the rest is just the meaningless counts of the codes 128
to 255 used to represent other Unicode characters via multi-byte sequences.)
>> #include <stdio.h>
>>
>> int main(void) {
>>
>> char* msg = "Now is the time for all good men"
>> " to come to the aid of their country";
>> char* s;
>> int counts[256]={0};
>> int c;
>>
>> s=msg;
>>
>> while (c=*s++) ++counts[c];
>>
>> for (c=' '; c<256; ++c)
>> if (counts[c]) printf("'%c': %d\n",c,counts[c]);
>> }
>
> You allocate space for 256 byte counts but char might be signed. This
> is another example of where script languages win over C -- usually fewer
> bugs in corner cases.
This is just the result of silly decision in C to make char signed.
And all compilers I've just tested make it signed, with default options.
(But FWIW, I was testing with my own compiler where char is unsigned.)
You would expect thorough testing however to pick up things like this.
Especially if you first develop in the scripting language - using
techniques not too different from what is available in the low level one
- then port the algorithm across and compare results.
--
bartc
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-20 12:48 -0400
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-20 18:08 +0100
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-21 09:32 -0400
Re: Warning: assignment from incompatible pointer type scott@slp53.sl.home (Scott Lurndal) - 2017-06-21 13:48 +0000
Re: Warning: assignment from incompatible pointer type Richard Heathfield <rjh@cpax.org.uk> - 2017-06-20 18:15 +0100
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-20 18:00 -0400
Re: Warning: assignment from incompatible pointer type "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-20 18:47 -0400
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-21 00:10 +0100
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-20 19:56 -0400
Re: Warning: assignment from incompatible pointer type "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-20 13:23 -0400
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-20 18:59 -0400
Re: Warning: assignment from incompatible pointer type Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-20 19:23 +0100
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-20 18:59 -0400
Re: Warning: assignment from incompatible pointer type Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2017-06-20 19:46 -0400
Re: Warning: assignment from incompatible pointer type Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-21 02:05 +0100
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-20 21:37 -0400
Re: Warning: assignment from incompatible pointer type Richard Heathfield <rjh@cpax.org.uk> - 2017-06-21 09:25 +0100
Re: Warning: assignment from incompatible pointer type David Brown <david.brown@hesbynett.no> - 2017-06-21 13:35 +0200
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-21 22:30 -0400
Re: Warning: assignment from incompatible pointer type Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-22 11:03 +0100
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-22 11:10 +0100
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-22 11:42 +0100
Re: Warning: assignment from incompatible pointer type David Brown <david.brown@hesbynett.no> - 2017-06-22 13:49 +0200
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-22 14:40 +0100
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-22 17:00 +0100
Re: Warning: assignment from incompatible pointer type David Brown <david.brown@hesbynett.no> - 2017-06-22 20:08 +0200
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-22 15:46 -0400
Re: Warning: assignment from incompatible pointer type Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-22 14:00 +0100
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-22 14:38 +0100
Re: Warning: assignment from incompatible pointer type Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-22 17:26 +0100
Re: Warning: assignment from incompatible pointer type Keith Thompson <kst-u@mib.org> - 2017-06-22 10:21 -0700
Re: Warning: assignment from incompatible pointer type bartc <bc@freeuk.com> - 2017-06-22 18:26 +0100
Re: Warning: assignment from incompatible pointer type David Brown <david.brown@hesbynett.no> - 2017-06-22 20:41 +0200
Re: Warning: assignment from incompatible pointer type Richard Heathfield <rjh@cpax.org.uk> - 2017-06-22 19:59 +0100
Re: Warning: assignment from incompatible pointer type Keith Thompson <kst-u@mib.org> - 2017-06-22 12:28 -0700
Re: Warning: assignment from incompatible pointer type Jerry Stuckle <jstucklex@attglobal.net> - 2017-06-21 09:49 -0400
Re: Warning: assignment from incompatible pointer type DFS <nospam@dfs.com> - 2017-06-21 10:36 -0400
Re: Warning: assignment from incompatible pointer type Jerry Stuckle <jstucklex@attglobal.net> - 2017-06-21 14:15 -0400
Re: Warning: assignment from incompatible pointer type Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-21 15:10 +0100
csiph-web