PHP mit SQL und HTML zusammen so zum laufen zu bekommen, überfordert viele Einsteiger.

Normalerweise solltest du alles in UTF-8 kodieren, aber da PHP damit von Hause aus nicht komfortabel umgehen kann, bleibt dir nur, dich durch die Server- und DB-Einstellungen zu kämpfen, und alle Kodierungen auf einen Nenner zu bringen.

Wenn du auf Nummer sicher gehen willst, dass deine Umlaute überall richtig angezeigt, korrekt in der DB gespeichert, von PHP nicht verhunzt und in der HTML-Seite korrekt angezeigt werden können, dann bleibt dir eigentlich nur das gute alte ASCII als Kodierung und die Verwenddung von Entities oder Escape-Sequenzen in HTML. Aber das ist eigentlich Pfusch.

Und deine aktuelle Lösung mag im Moment zwar lokal bei dir funktionieren, wird bei einem Serverumzug aber garantiert größere Probleme verursachen.

Bitte informiere dich genau, wie PHP und MySQL zusammen arbeiten, und wie man eine Unicode-Kodierung fehlerfrei aufsetzt, die auch im HTML ohne bsondere Header auskommt. Alles andere ist auf Dauer nur Frickelei.

Viel Erfolg! :)

...zur Antwort
Finde ich nervig, das erschwert das Lesen.

Ich finde das ebenfalls schwachsinnig, allerdings muss man beachten, dass sich viele Frauen tatsächlich nicht angesprochen fühlen, wenn nur der "normale" Plural verwendet wird.

Deshalb reden Männer und Frauen auf dem Gebiet auch immer aneinander vorbei: Männern ist das tatsächlich egal, Frauen aber nicht.

Das gleiche ist es mit Vorbildern: Männer brauchen keine Vorbilder, Frauen aber unbedingt. Warum das so ist, und warum die meisten Frauen ohne Vorbilder kein Interesse an einer tachn. naturwissenschaftl. Sache entwickeln können, weiß man nicht, nur eben, dass es so ist.

Deshalb sollten Frauen verstehen, dass es für Männer tatsächlich völlig irrelevant ist, sich um sprachliche Feinheiten oder Vorbilder zu kümmern, und Männer sollten verstehen, dass diese Dinge für Frauen offensichtlich oft sehr wichtig sind.

Natürlich gibt es auch Ausnahmen, aber darum geht es jetzt nicht. Ich beziehe mich nur auf den größten Teil der Männer und Frauen im Durchschnitt.

Wenn also Frauen nach Vorbildern und gendergerechter Sprache schreien, ist das erst mal irgendwie nachvollziehbar ... wenn auch für mich persönlich nicht verständlich.

Und wenn Männer damit nichts anfangen können, dann ist das genauso nachvollziehbar.

Bei den Vorbildern ist die Sache einfach: Man muss nur mehr Poster mit weiblichen Wissenschaftlerinnen aufhängen.

Bei der Sprache ist das nicht so einfach, da Lesegeschwindigkeit und Textverständnis enorm darunter leiden, und das hat auch nichts mit "Gewöhnungssache" zu tun. Zumal fast immer der Sinn entstellt wird ... mal mehr, und mal weniger.

...zur Antwort

Naja, so funktioniert Evolution. Punkt.

Wenn die Viecher dort das Ökosystem so nachhaltig schädigen, dass sie sich selbst ausrotten, dann sind sie eben weg.

Zumal es sich bei den Kanninchen um eine invasive Art handelt, die das lokale Biom nachhaltig komplett zerstört hat.

Denk doch bitte mal eine Sekunde nach, was du hier forderst!

Sollen die Kanninchen denn deiner Meinung nach gefüttert werden? Um sich NOCH mehr zu vermehren und die Lage NOCH mehr zu verschärfen?

Ich bin dafür, die Tiere wie damals in Australien mit Viren zu infizieren und komplett von der Insel zu tilgen. Dann hat die einheimische Flora und Fauna wieder eine Chance auf normales Leben.

Der Natur wäree sehr geholfen, wenn man die Kanninchen dort alle ausrotten würde. Das gleiche gilt für Waschbären in Europa, und zahllose weitere invasive Arten.

Gerade in Japan sind die Missishippi-Schildkröten eine riesen Plage und jeder der tierlieb ist, sollte sie totschlagen, sobald er eine findet. Die haben schon ganze Flüsse und Seen in Japan von einheimischen Schildkröten, Fischen, Amphibien, uvm. "befreit". Eine absolute Plage.

Von daher bin ich dafür, solche Tiere gnadenlos zu jagen und bis auf das letzte zu vernichten. Denn der Schaden an der Natur, der allein durch ihre Existenz verursacht wird, ist kaum wieder gut zu machen.

...zur Antwort

Dein Code hat einige Mängel:

  • In der summe()-Funktion fehlt die return-Anweisung. (Alternativ kannst du den Rückgabewert in "void" ändern ... hängt halt davon ab, was du vor hast.)
  • Deutsche Bezeichner sollten vermieden werden. Benenne deine Funktion lieber auf Englisch.
  • Die Variable "y" wird nicht initialisiert und nicht genutzt, kann also weg.

Dann noch einige allgemeine Anmerkungen:

  • Die Zeile mit "return 0;" innerhalb von main() kann tatsächlich weg, weil main() ein Spezialfall ist. Aber es ist natürlich genauso richtig, wenn du es dort lässt.
  • Kompiliere deinen Code bitte immer mit möglichst strikten Compilereinstellungen, damit dir Fehler sofort auffallen.

Und nun zu deiner eigentlichen Frage: Du willst wissen, warum im Folgenden ein korrektes double-Ergebnis ausgegeben wird?

double a = 1.2;
int b = 3;

printf("%.2f", a + b);

Das gibt "4.2" aus, weil bei der Addition von "a + b" vorher implizit sichergestellt wird, dass beide Operanden vom Typ double sind.

Am besten, du lernst systematisch C mit einem guten Tutorial oder Buch von Anfang bis Ende. Dann lösen sich solche Fragen von ganz alleine. :)

...zur Antwort

Das ist lustigerweise genau mein Beruf! Also Sofware auf Schwachstellen untersuchen. :)

Aus eigener Erfahrung kann ich dir sagen, dass große OpenSource-Projekte viel sicherer sind, bzw. über weniger Sicherheitslücken verfügen, als große ClosedSource-Programme.

Bei kleineren Projekten nimmt es sich hingegen nicht viel.

Also kann man im Schnitt sagen, dass OS sicherer ist.

Und mir ist eigentlich egal, ob ich Zugriff auf den Quelltext habe, oder nicht, da ich mir das Disassemblat der Banaries sowieso im Debugger ansehe. (Das ist aber kein "normaler" Debugger, so wie du ihn dir vorstellst, aber das würde hier jetzt den Rahmen sprengen ...)

Fazit: ClosedSource schützt nicht davor, dass ich mir die Funktion angucken und mögliche Sicherheitslücken finden kann. Im Gegenteil, die größten Schweinereien findet man genau dort.

...zur Antwort

Einfach ...

echo ~

... probieren. :)

Oder ...

echo $HOME

... eingeben. Fast alle Shells stellen diese Umgebungsvariable zur Verfügung.

Ansonsten sollte ...

  cd && pwd

... funktionieren, das ändert aber dauerhaft dein Arbeitsverzeichnis.

Die Tilde "~" wie im Kommentar unter der anderen Antwort wird übrigens nicht benötigt.

Außerdem solltest du beachten, dass nicht alle Nutzer ein Home-Verzeichnis haben!

...zur Antwort

Weil ein Informatik-Studium viel mehr mit Mathematik, als mit Programmieren zu tun hat.

Außerdem lernst du dort Dinge wie Compilerbau und wichtige theoretische Informatik, die dir als Programmierer erst richtig ermöglichen vernünftig Software zu entwickeln.

Dafür brauchst du Kenntnisse in Logik (Aussagenlogik, Prädikatenlogik, usw.).

Und bei der Signalverarbeitung wirst du nicht weiter kommen, ohne die Funktionsweise einer Fourier-Transformation zu verstehen ... es sei denn du frickelst blind mit FFTW rum, ohne wirklich zu wissen, was du da mit deinen API-Calls eigentlich tust.

Desweiteren lernst du, warum man ohne tiefgehende Mathematikkenntnisse NIEMALS Verschlüsselungen und Zufallszahlengeneratoren selbst entwickeln sollte, was leider immer wieder Laien-Informatiker versuchen.

Alles in allem lernst du eine Art "Demut", und dass eben doch nicht alles so einfach ist, wie es scheint.

Fakt ist, dass ein Informatikstudium mit Programmieren eher wenig zu tun hat und du den Vergleich eher mit einem Mathematikstudium ziehen solltest.

PS: Aus meiner eigenen Erfahrung weiß ich, dass die meisten C++ und Java Entwickler ihre Sprachen nur sehr sehr oberflächlich kennen.

Da ich mir sehr sicher bin, dass das bei dir nicht anders ist, solltest du anstelle eines Informatik-Studiums vielleicht erst mal C++ und Java auf einem wirklich fortgeschrittenen Level lernen.

Damit wäre deiner Arbeit als Entwickler sicher wesentlich mehr geholfen.

Ob du Fortgeschritten bist, oder nicht, erkennst du daran, wie oft du eigene Allokatoren oder Iteratoren schreibst, ob du alle C++17-Features wie Fold-Expressions oder Static-Bindings nutzt, ob du Const-Correctess verinnerlicht hast und ob du Attribute wie [[nodiscard]] regelmäßig nutzt.

Falls du bei einem einzigen dieser Punkte nicht auf Anhieb weißt, worum es geht, dann halte ich ein Informatik-Studium in deinem Falle für unangebracht, da du du als Software-Entwickler erst mal deine aktuellen Fähigkeiten auf ein professionelles Niveau heben solltest.

Ansonsten: Mach dein Abi nach, und studiere was du willst. :)

...zur Antwort

Vorweg: Ich bin Reverser und zu Übungszwecken habe ich schon viele VMprotect-geschützte "CrackMes" knacken können.

VMprotect funktioniert nicht. Du hast dafür hoffentlich kein Geld ausgegeben.

Die Herstellerwebsite verspricht den gleichen Bullshit wie schon andere Hersteller vor über 30 Jahren.

Merke dir bitte: Ein fähiger Reverser wird mit KEINEM Kopierschutz oder Tamperschutz Probleme haben. Im Gegenteil, das weckt den Spielttrieb und die meisten sehen es als Sport, so etwas zu knacken.

Und für die unfäigen Skriptkiddies gibt es meist schon ein bis drei Wochen später einen komfortablen "Entpacker" mit hübscher klickbarer GUI.

Fazit: Fall nicht auf den Marketing-Bullshit des Herstellers rein und verschwende weder Zeit noch Geld mit dem Schutz deiner Software.

Entweder deine Software ist Müll, sodass sich keiner dafür interessiert, oder deine Software ist richtig gut, dann wird sie auch geknackt werden.

Investiere deine wertvollen Ressourcen lieber in die Entwicklung und Verbesserung deiner Software, anstatt in irgendeine Form von Schutz. (Diese Aussage liest man in ähnlicher Form in nahezu allen Fachbüchern und hört sie von nahezu allen Koryphäen auf dem Gebiet ... ist also nicht auf meinem Mist gewachsen, aber ich schließe mich dem natürlich vollumfänglich an!)

Also ... vergiss VMprotect und gib um GOTTES WILLEN bitte kein Geld dafür aus! Lass dich nicht veralbern!

Schönen Abend noch! :)

PS: Dass deine Software als Trojaner erkannt wird ist nur einer von vielen vielen Nachteilen, mit dem deine ehrlichen Kunden leben werden müssen, und wovon Crack-Nutzer überhaupt nichts mitbekommen werden!

Wenn du deine Kunden möglichst effizient vergraulen willst, dann nutze VMprotect & Co! Wenn nicht, dann lass es einfach bleiben. ;)

...zur Antwort
Ja

PHP als "absolut schlecht" zu bezeichnen halte ich für übertrieben, da diese Sprache durchaus sinnvolle Einsatzzwecke hat.

Aber als "relativ schlecht", also im Verhältnis zu anderen Programmiersprachen, kann man PHP getrost bezeichnen.

Das hat m. p. M. n. die folgenden Hauptgründe, die so gehäuft in keiner anderen mir bekannten Mainstream-Sprache auftreten:

  1. PHP wurde für die serverseitige Programmierung entwickelt, bietet aber von Haus aus keine vernünftige und portable Möglichkeit der Synchronisation einzelner Prozesse. (Stichwort IPC: die SysV-Techniken gelten als überholt und führen schnell zu Deadlocks, PThreads bekommt man nur mit Zusatzmodul, welches nicht in der Standardinstallation enthalten ist, uvm.)
  2. Die Dokumentation auf php.net wirkt auf den ersten Blick übersichtlich, ist aber total kaputt. Es gibt kaum eine Funkion bzw. einen Aspekt, deren / dessen Seiteneffekte vollumfänglich in der Doku aufgelistet sind. Ohne die korrigierenden Kommentare darunter wäre man oft völlig aufgeschmissen. Aber selbst mit Kommentaren fehlen Teile der API-Docs schlichtweg, oder sind einfach nur falsch beschrieben, d. h. es gibt gravierende Abweichungen von dem, was beschrieben wird, und dem, was wirklich passiert. (Dazu muss man sich den Quelltext des Interpreters ansehen.)
  3. Die API ist total inkonsistent, sowohl im Bezug auf Parameterreihenfolge, Namensgebung von Funktionen, als auch dem Vorhandensein von Features aufeinander bezogener Funktionen.
  4. Anstatt Containertypen ordentlich für unterschiedliche Aufgaben anzubieten, hat man sich entschieden, eine Gottimplementierung namens "array" zu erschaffen, die intern eher weniger mit einem Array zu tun hat, als viel mehr einem Mischmasch aus Deque, Baum, Hashtable, und einigen weiteren herkömmlichen Containertypen. Diese Chimäre ist nicht nur vergleichsweise recht langsam, sondern frisst auch sehr viel unnötigen Speicher.
  5. Der Interpreter selbst ist in C geschrieben, und wenn man sich dessen Quelltext ansieht, fallen einem alle Code-Smells und Beispiele für schlechten Stil entgegen, vor denen selbst in Anfängertutorials gewarnt wird. Wie man einen sauberen Interpreter schreibt, kann man bei CPython sehen. Selbst ein uralter Perlinterpreter ist verglichen mit dem aktuellen PHP-Branch noch als "sauber" zu bezeichnen.
  6. Es fehlt eine "vernünftige" Unicode unterstützung. Die Betonung liegt auf "vernünftig" und schließt Workarounds mit den mb_XYZ() Funktionen aus, die noch nie eine wirkliche Alternative waren.
  7. Eine vernünftige Möglichkeit der Fehlerbehandlung fehlt völlig. Das ist einer der Gründe, warum gerade PHP-Entwickler so arge Probleme damit haben, da "Rückgabewert checken und evtl. Ausnahme werfen" eben meist viel zu viel Codebloat erzeugt und deshalb meistens gleich völlig weggelassen wird. (Das sieht man leider auch in fast allen Großprojekten!)

Es gibt noch mehr Punkte, und einige der oben genannten findet man tatsächlich auch bei anderen Sprachen, aaaaaaber niemals mehr als zwei davon gleichzeitig und in einer derart starken Ausprägung, wie bei PHP. (Und ich habe schon mit zich Programmiersprachen zu tun gehabt ...)

Es gibt allerdings auch einige wenige positive Punkte zu PHP:

  1. Neue Sprachversionen verfügen tatsächlich über einige wenige Sprachfeatures, die man von einer modernen Programmiersprache auch erwarten darf. (Auch wenn PHP hierbei erfahrungsgemäß immer ein paar Jährchen hinterher hinkt.)
  2. Seit PHP 7.x wurde die Geschwindigkeit des Interpreters massiv verbessert.
  3. PHP bringt seinen eigenen Webserver mit, den man mal eben für schnelles Testen anschmeißen kann, ohne sich einen ausgewachsenen Apache installieren zu müssen.

So, das wars. :)

Ich denke, dass ich meine Kritik ganz fundiert begründet habe, auch wenn ich mir Codebeispiele zu den einzelnen Punkten gespart habe.

Aber ein Software-Entwickler wird ohnehin sofort erkennen, was gemeint war.

Von daher muss ich sagen: Es gibt wirklich gute Gründe, PHP einzusetzen. Aber es gibt meistens noch mehr, die dagegen sprechen.

PHP ist nicht per se schlecht ... aber ganz offensichtlich schlechter (relativ gesehen!) als andere Sprachen.

Wenn man die Pro-Argumente "billig" und "überall verfügbar" weglässt, bleibt eigentlich nicht mehr viel, was FÜR diese Sprache spricht.

Aber dennoch sollte man PHP halbwegs nutzen können ... genauso wie viele weitere Sprachen. Denn nur so kann man die passendste wählen, und ist nicht auf die einzige angewiesen, die man kann. :)

...zur Antwort

Andere Antwort:

Für mich als Mensch war das "H" am Ende nicht auf Anhieb erkennbar, aber darum geht es mir jetzt nicht.

Ich bin selber jemand, der Bots zum Knacken von Captchas geschrieben hat. (Nur aus Sport, nix Illegales!)

Du musst einfach nur das Captcha a) in Graustufen umwandeln, b) durch einen Weichzeichner jagen und c) einen Schwellenwertfilter anwenden.

Jeder der drei Punkte erfolgt nicht blind, sondern anhand einer groben Analyse einiger Pixel (Monte Carlo) und schwupps ... schon hast du (leicht abgerundete) schwarze Buchstaben auf weißem Grund.

Das lässt sich dann im nächsten Schritt sehr leicht in einzelne Zeichen zerlegen, die dann analysiert werden.

Im konkreten Fall würde das Linienbündel ganz links oben zwar einen störenden Artefakt erzeugen, aber mithilfe eines weiteren Filters, der Müll vom Rand ausgehend enternt, kein Problem.

Fazit: Versuche so zu denken, wie eine OCR-Software! Damit ist dein Captcha in seiner jetzigen Form nämlich wirklich leicht lösbar.

Ich gebe dir noch ein paar Tipps aus eigener Erfahrung:

  1. Farben bringen fast nichts, weil normalerweise schon ganz am Anfang alles in Graustufen umgewandelt wird. (Natürlich nicht stupide, sondern nach gewissen Regeln! Merk dir einfach, dass bunte Zeichen auf buntem Hintergrund meistens keine wirkliche Herausforderung sind, auch wenn es auf den ersten Blick anders scheint.)
  2. Ein Rauschen, egal in welcher Form (große, kleine, runde, lange, eckige, bunte, schwarze Punkte ...) bringt überhaupt GAR nichts und wird meistens schon im zweiten Schritt problemlos heraus gefiltert.
  3. Linien, welche direkt an den Randpixeln beginnen oder enden, lassen sich erstaunlich leicht herausfiltern.
  4. Versuche deine einzelnen Zeichen etwas überlappen zu lassen, denn so freistehend,, wie sie jetzt sind, ist es ein Kinderspiel.
  5. Nutze keine dünneren Linien als die Strichstärken der einzelnen Buchstaben selbst.
  6. Zeichne (dickere) Linien hinter oder vor den einzelnen Buchstaben. (in der selben Farbe, wie die Buchstaben selbst)
  7. Ein Drehen der einzelnen Buchstaben bringt fast nichts. Die lassen sich trotzdem sehr zuverlässig erkennen, egal um welchen Winkel du sie drehst.
  8. Nutze keine serifenlose Standardschrift. Nutze lieber einen Font mit Serifen oder noch besser: Nimm eine etwas exotische Kunstschrift oder gar einen Handschriften-Font. (Arial, Helvetica, Times, usw. kannst du alle vergessen! An denen trainiert man normalerweise seine Software. Selbst Comic-Sans ist noch zu "normal".)
  9. Lass die einzelnen Zeichen nicht allesamt heller bzwl dunkler als der Hintergrund sein, sondern zeichne einige heller, und einige dunkler als der Hintergrund! (das bringt aber nicht soooo viel und meine Software kommt auch damit eigentlich sehr gut klar, aber andere "Hersteller" haben oft Probleme damit, wenn es mehrere Helligkeitsebenen gibt, die allesamt wirld durcheinander gewürfelt sind)

So, das fällt mir jetzt spontan dazu ein, und das sind so die gängigen Fehler, die Programmierer oft machen, wenn sie eigene Captchas erstellen. Nicht alles, was kompliziert aussieht, ist es auch ... schon gar nicht für eine ganze Batterie an OCR-Algorithmen! :)

PS: Als Mensch hasse ich Captchas wie die Pest, weil ich immer mehr Versuche benötige, als eine Software.

An deiner Stelle würde ich grundsätzlich auf Captchas verzichten und mir etwas anderes ausdenken. Aber das musst du selbst wissen. :)

...zur Antwort

Falls du als Impfreaktion kurzzeitig leichtes Fieber entwickelst, kann es durchaus sein, dass die Darmflora dir das übel nimmt.

Deshalb könnte ich mir durchaus vorstellen, dass es auch zu einer Art Durchfall kommen kann.

Das wird sich aber mit Sicherheit sehr schnell wieder legen, sofern die Ursache tatsächlich die erhöhte Temperatur aufgrund der Impfung ist.

Es kann natürlich genauso gut ein Zufall sein, und du hast ausversehen nur etwas schlechtes gegessen.

Aber höchstwahrscheinlich wirst du es überleben. :)

...zur Antwort

Ich denke, dass ein einziger Trottel, der sich unter Millionen von vernünftigen Demonstranten zum Hampelmann machen will, nicht bzw. nur sehr lokal auffallen wird.

Aber wenn es dir Spaß macht, dich dumm zu stellen, dann tu' was du nicht lassen kannst.

PS: Hab gerade heute erst Ergebnisse einer Untersuchung gelesen, nach denen die FFF-Teilnehmer überdurchschnittlich gebildet sind und die Gegner i.d.R. keine höhere Bildung genossen haben. Ich lass das hier einfach mal so stehen. ;)

...zur Antwort
Vermeide Palmöl zu 100%

Ich achte da sehr drauf, seitdem ich das erste mal davon gehört habe ... was mittlerweise schon weit über 10 Jahre her ist.

Genauso wichtig ist mir, dass ich keine Papierproduke ohne (P)FSC-Logo kaufe und Meeresfrüchte nicht ohne eines der strengsten Prüfsiegel.

Ich denke, das, und ein paar weitere Dinge, sind jEDEM zuzumuten, aber es gibt ja auch Leute, die zu faul sind, ihre Altbatterien ordentlich zu entsorgen.

Fakt ist, dass ein Daraufachten, auf gefühlt 90% aller Umweltsauereien, keinen nennenswerten Mehraufwand bedeutet.

Ich repariere auch alle meine Elektrogeräte selbst, und habe in den letzten 25 Jahren exakt Null Elektroschrott verursacht. Und für Leute, die so etwas nicht selbst können, kostet eine Reparatur oft nur wenige Euro und damit einen Bruchteil einer Neuanschaffung.

(Geschrieben auf einem Laptop von 2008, der dank Linux auch heute noch einwandfrei läuft und für Büroarbeiten, Surfen, Videogucken, uvm. immer noch perfekt geeignet ist.)

Ich mache sicherlich nicht alles richtig und es gibt bestimmt noch sehr viel Optimierungspotential, aber jeder sollte sich wenigstens so viel Mühe geben, wie er / sie / es kann.

Dass da einige Leute eine Trotzhaltung einnehmen und dann mit einer "Jetzt-erst-recht-Haltung" absichtlich verschwenderisch leben, kann ich nicht nachvollziehen.

...zur Antwort

Neben der sehr guten Antwort von Isendrak und seinen Kommentaren, noch zwei kleine Anmerkungen:

1) Gewöhne dir an, als Indextyp für Arrays ausschließlich size_t zu nutzen. Das ist ein vorzeichenloser Ganzzahltyp, der u. a. garantiert groß genug für alle möglichen Arraytypen ist.

Viele Sicherheitslücken gibt es nur, weil Entwickler statt size_t einen vorzeichenbehafteten Typen wählen.

Normalerweise ist das erste, was man bei einem Security-Audit macht, alle Indexvariablen die nicht size_t sind, in eben diesen Typen umzuwandeln.

Merk dir einfach, dass ein int als Index bei Java aus verschiedenen Gründen völlig OK ist, bei C und C++ aber ein absolutes Nogo.

2) Die Art und Weise, wie deine Schleife aufgebaut ist, ist ineffizient und fehleranfälllig.

Du hast ...

for (i = 0; i <= length - 1; ++i) ...

... geschrieben, aber ...

for (size_t i = 0; i < length; ++i) ...

... solltest du dir angewöhnen.

Da du vermutlich nicht in C89 programmierst, ist es sinnvoller, die Schleifenvariable an der Stelle zu definieren, an der sie genutzt wird. Dabei wird natürlich der Typ size_t genommen.

Der Vergleich mit "<" statt "<=" erspart dir eine Subtraktion und einen möglichen Überlauf. Du schlägst also zwei Fliegen mit einer Klappe.

Und wenn du dir bei for-Schleifen als Inkrement-Operation "++i" statt "i++" angewöhnst, hat das zwar bei guten Compilern keinerlei Auswirkungen auf C-Code, aber falls du in Zukunft mal mit C++ und überladenen Operatoren in Berührung kommst, schließt du damit eine weitere Fehlerquelle aus.

Ansonsten wurde ja schon alles gesagt.

PS: Um size_t nutzen zu können, musst du evtl. ...

#include <stdlib.h>

... oder ...

#include <stddef.h>

... einbinden. Das passiert zwar oft indirekt, wenn du andere Header nutzt, aber es ist besser auf Nummer Sicher zu gehen.

Viel Spaß! :)

...zur Antwort

Damit sagst du dem Compiler, dass alle Warnungen eingeschaltet werden sollen (-Wall) und diese als Fehler behandelt werden sollen (-Werror).

An deiner Stellle würde ich aber noch weitere Flags nutzen:

-Wall -Wextra -Wpedantic -Werror

Das wird für dich als Einsteiger vermutlich anfangs recht nervig werden, aber nur so lernst du, ordentlichen und sauberen Code zu schreiben.

Ich selbst nutze - je nach Compiler - noch deutlich mehr Flags, aber die oben genannten 4 sind das absolute Minimum, womit du Bugs recht effektiv vermeiden kannst.

...zur Antwort

Schreib mal folgenden Inhalt in eine C Datei (z. B. "foo.c"):

int main(void) {
  return 0;
}

Und dann kompiliere das Ganze mit:

gcc foo.c

Falls es damit Probleme gibt, liegt die Ursache beim Compiler.

...zur Antwort