Liste des Groupes | Revenir à cl c |
On 6/13/2024 9:21 AM, David Brown wrote:Certainly if I wanted to calculate some statistics from small data sets, I'd go for Python - it would not consider C unless it was for an embedded system.On 13/06/2024 00:34, DFS wrote:I write a little code every few days. Mostly python.On 6/12/2024 6:22 PM, Keith Thompson wrote:>Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:On 12.06.2024 22:47, DFS wrote:[...][...]before: char outliers[100];
after : char outliers[100] = "";Seriously; why do you expect [in C] a declaration to initialize that>
stack object? (There are other languages that do initializations as
the language defines it, but C doesn't; it may help to learn before
programming in any language?) And why do you think that "" would be
an appropriate initialization (i.e. a single '\0' character) and not
all 100 elements set to '\0'? (Someone else might want to access the
element 'answer[99]'.) And should we pay for initializing 1000000000
characters in case one declares an appropriate huge array?
This:
char outliers[100] = "";
initializes all 100 elements to zero. So does this:
char outliers[100] = { '\0' };
Any elements or members not specified in an initializer are set to zero.
Yes. It's good to point that out, since people might assume that using a string literal here only initialises the bit covered by that string literal.
>
(In C23 you can also write "char outliers[100] = {};" to get all zeros.)
>>>
If you want to set an array's 0th element to 0 and not waste time
initializing the rest, you can assign it separately:
char outliers[100];
outliers[0] = '\0';
or
char outliers[100];
strcpy(outliers, "");
though the overhead of the function call is likely to outweigh the
cost of initializing the array.
A good compiler will generate the same code for both cases - strcpy() is often inlined for such uses.
>>>
Thanks. I'll have to remember these things. I like to use char arrays.
>
The problem is I don't use C very often, so I don't develop muscle memory.
>
What programming language do you usually use? And why are you writing in C instead? (Or do you simply not do much programming?)
I like C for it's blazing speed. Very addicting. And it's much more challenging/frustrating than python.With small data sets, Python has blazing speed - /every/ language has blazing speed. And for large data sets, use numpy on Python and you /still/ have blazing speeds - a lot faster than anything you would write in C (because numpy's underlying code is written in C by people who are much better at writing fast numeric code than you or I).
I coded a subset (8 stat measures) of this C program 3.5 years ago, and recently decided to finish duplicating all 23 stats shown at:Understanding that you should not read from a variable that has never been given a value is well within the pay grade of every programmer. And it's something that every C programmer should understand. (And now you understand it too!)
https://www.calculatorsoup.com/calculators/statistics/descriptivestatistics.php
Working on the outliers code, I decided to add an option to generate data with consecutive numbers. That's when I ran $./dfs 50 -c and noticed every value above 40 was considered an outlier. And this didn't change over a bunch of code edits/file saves/compiles.
Understanding how an uninitialized variable caused that persistent issue is beyond my pay grade.
That's when I whined to clc. Before I even posted, though, I spotted the uninitialized var (outliers). Later I spotted another one (mode).
One led to 'undefined behavior', the other to 'stack smashing'. Both only occurred when using consecutive numbers.
But with y'all's help I believe I found and fixed ALL issues. I can dream anyway.
Les messages affichés proviennent d'usenet.