... alle anderen Sprachen sind Geschwafel. :)
Beides! :)
Die Frage erinnert mich an mich selbst. Vor gefühlten 100 Jahren habe ich mir selber unglaublich viele Gedanken gemacht, ob ich das interpretierte QBasic, oder das kompilierte QuickBasic nehmen solle.
Deshalb erst mal danke für die schöne Frage, erinnert mich, an mich selbst. :)
Inzwischen weiß ich, dass die Antwort auf die Frage meistens egal oder mindestens total unwichtig ist. Sowohl Interpreter als auch Compiler haben ihre Vorzüge und Nachteile.
Außerdem wirst du im Laufe deines Lebens als Programmierer sowieso mit X verschiedenen interpretierten und kompilierten Sprachen zu tun haben, und immer die einsetzen, die für ein Projekt am geeignetsten ist.
Sich über interpretiert vs. kompiliert Gedanken zu machen ist, als wenn du bei der Typisierung statisch gegen dynamisch abzuwägen versuchst. Deswegen würden einige Leute im Internet wohl auch Kriege führen, aber ein Profi schweigt, und weiß beides geschickt einzusetzen. :)
Das ist so eine einfache Aufgabe, dass mir spontan keine Sprache einfallen würde, mit deren GUI-Fähigkeiten das NICHT ginge.
Du kannst also vermutlich JEDE Sprache nehmen. :)
Bei deinen Minimalanforderungen ist es völlig egal, ob du dafür C, C++, C#, Java, JavaScript, Ruby, Perl, Python, Delphi, oder was auch immer nimmst.
Dein Textfenster kannst du über ein Fenster oder über ein Webinterface realisieren. :)
Diesen Müll interpretierst du am besten gar nicht und verwirfst die Adresse.
Ich schreibe ebenfalls hin und wieder Crawler und bei mir purzeln ebenfalls im Sekundentakt fehlerhaft formatierte Responses rein.
Das liegt entweder daran, dass irgendein Trottel versucht hat selbst einen Server zu schreiben, ohne die RFCs korrekt umzusetzen, oder es ist ein Honey-Pot, der bewusst fehlerhafte Antworten liefert, die von den regulären "guten" Diensten sowieso ignoriert werden.
Meine Favoriten sind:
- Statt \r\n wird nur \n oder noch schlimmer nur \r als Zeilentrenner in den Headern genutzt.
- Zwischen Headern und Content steht kein \r\n\r\n, sondern nur ein einziges \r\n.
- Content wird angeblich als gzip ausgeliefert, ist aber in Wirklichkeit unkomprimiert.
- Als Trenner zwischen Header-Key und -Value wird '=' anstelle von ':' benutzt.
- Nach dem ':' im Header folgt kein Leerzeichen.
- Ein '-' wird in vielen Headern, z. B. "Content-Type" weggelassen.
- Groß- und Kleinschreibung wird bei Headern ignoriert: "content-length"
- Content wird gänzlich ohne Header ausgeliefert.
So, das waren nur die gängigen Dinge der Header, aber es gibt noch viiieeel mehr.
Im Grunde genommen musst du deinen Crawler so programmieren, als ob er auf die Server von besoffenen und geistig behinderten Entwicklern unter Drogen im Vollrausch zugreift. An Standards halten sich viele leider überhaupt nicht!
Deshalb hast du jetzt zwei Möglichkeiten:
- Entweder du baust dir seeeeeehr wohlwollende Parser, die ganz naiv jeden Müll in irgendetwas vernünftiges parsen, und landest dafür binnen Sekunden in Honey-Pot-Datenbanken, oder ...
- ... du ignorierst alles, was sich nicht strikt an den Standard hält. Websites, die sich nicht in den gängigen Browsern ansehen lassen, kannst du sowieso vergessen.
Naja, dann spiel mal noch schon mit deiner Suchmaschine rum. :)
Einfach einen passenden Container mit einem gewünschten LayoutManager ausstatten, diesen in die ScrollPane packen und, sofern erwünscht, auf bestimmte Ereignisse horchen und dann ggf. den Inhalt neu ausrichten. :)
Macht doch lieber einen Instagram-Account zum Thema "Tiết canh". Das ist nicht so fade wie veganes Zeug, aber man bekommt es in Deutschland kaum.
Schade eigentlich ... wer Blutwurst mag und gern vietnameisch isst, wird "Tiết canh" lieben. :)
Das Wort "Programmierbefehl" ist hier fehl am Platz. Eine Programmiersprache besteht laienhaft ausgedrückt aus syntaktischen Regeln, soz. der Grammatik, und nahezu unendlich viel Bibliothekskram (v. a. Funktionen u. Klassen), was du evtl. als Vokabeln auffassen könntest. (Ich weiß, der Vergleich hinkt gewaltig, aber mir fällt keine bessere Analogie ein.)
Wenn du in C++ zwei Werte mit 1 und 2 addieren, und das Ergebnis ausgeben willst, sieht das so aus:
int a = 1;
int b = 2;
int c = a + b;
cout << c;
In PHP würde das so aussehen:
$a = 1;
$b = 2;
$c = $a + $b;
echo $c;
Aber es gibt nahezu unendlich viele Möglichkeiten diesen einfachen Sachverhalt auszudrücken und je nach Programmierstil und Entwickler wirst du auch ganz andere Ergebnisse sehen. Ein anderes Beispiel in C++, welches das selbe Resultat liefert, intern aber ganz anders Funktioniert, sieht so aus:
constexpr unsigned A { 1 };
constexpr unsigned B { 2 };
printf("%d", (A + B));
Wobei das sehr merkwürdig gemischter Code ist, den du so hoffentlich nie in freier Wildbahn sehen wirst, aber egal ... ist ja nur ein Beispiel. :)
Die Regeln einer Programmiersprache lernst du nicht an einem Nachmittag, aber wenn du fleißig übst, dürftest du nach spätestens ein paar Monaten einen ganz akzeptablen Überblick haben.
Allerdings ist PHP von Umfang und Komplexität her verglichen mit C++ absoluter Krümelkram. C++ ist VIEL mächtiger, und zwar in allen Aspekten, sowohl syntaktisch als auch im Hinblick auf die Standardbibliothek.
Allerdings ist PHP bei Anfängern wohl beliebter, weil man damit schneller erste Ergebnisse bestaunen kann.
Vom Sprachdesign und vor allem von den Bibliotheksfunktionen her ist PHP aber ziemlich verkorkst und teilweise wirklich schlecht durchdacht. C++ hat zwar auch seine Macken, wirkt aber deutlich abgestimmter. Ist aber auch kein Wunder. Seit weit über 20 Jahren gibt es ein internationales Standardkomitee welches C++ nach ISO standardisiert.
Bei PHP existierten bis vor relativ kurzer Zeit überhaupt gar keine verlässlichen Infos, auf die man sich als Entwickler von PHP verlassen konnte. PHP wurde fast zwei Jahrzehnte lang "nach Gefühl" und "Vermutung" ohne strukturierten Plan entwickelt, und das spürt man heute noch in PHP 7.x, weil es eben schwer ist, alte Zöpfe abzuschneiden.
Aber auch wenn ich PHP für eine grauenhafte Sprache halte, so muss ich dennoch sagen, dass man diese nicht nur halbwegs gut kennen, sondern auch richtig fit darin sein sollte. Vor allem, wenn man hin und wieder mal mit Webkram zu tun hat. Also auch wenn du beruflich hauptsächlich mit Java arbeitest, wäre es trotzdem sinnvoll, auch PHP "lesen und schreiben" zu können.
Ist zwar ekelhaft, aber manchmal muss man auch unangenehme Dinge lernen. Zum Glück wirst du als Anfänger kaum mitbekommen, wie schlimm PHP ist ... das merkt man eigentlich erst viele Jahre später, wenn man schon "richtig" programmieren kann. :)
Naja, wie du die Sprachen lernen kannst, haben dir die anderen ja schon geschrieben.
Das Wort Schmierzeichen war mir bisher unbekannt. Ist das ein Dialekt? Darf ich mal fragen aus welchem Land und welcher Region du ungefähr kommst? In meiner Gegend kennt diesen Begriff vermutlich kaum jemand. :)
Zu deiner Frage: Eine Variable vom Typ "Zeiger auf char" wird von den Standard-Ein- und Ausgabe-Streams besonders behandelt, nämlich als sog. C-String.
Beispiel:
#include <iostream>
int main(void) {
using namespace std;
int i = 123;
int * ip = &i;
cout << "i: " << i << endl;
cout << "ip: " << ip << endl;
char c = 'x';
char * pc = &c;
cout << "c: " << c << endl;
cout << "pc: " << pc << endl;
const char * cstr = "Hallo!";
cout << cstr << endl;
}
Wie du siehst, wird ein Integer als Zahl ausgegeben, und bei einem Zeiger darauf die Adresse des Zeigers.
Bei einem char wird ebenfalls der char direkt ausgegeben, aber bei einem Zeiger auf char erwartet der Compiler, dass es ein Zeiger auf einen Nullterminierten Speicherbereich ist, wobei alle Zeichen vor der Null ausgegeben werden.
Der Zeiger "cstr" am Ende zeigt auf das erste Zeichen der Zeichenkette "Hallo!", also auf das 'H'. Am Ende der Zeichenkette steht implizit ein Nullzeichen nach dem Ausrufezeichen, woran der Ausgabeoperator << erkennt, dass heir das Ende der Ausgabe erreicht ist ... er gibt also nur alle Zeichen vom ersten 'H' bis zum Ausrufezeichen am Ende aus und merkt dann sofort, dass Schluss ist.
Wenn du jetzt einem char-Zeiger, die Adresse einer einzelne char-Variablen zuweist, denkt der Ausgabestrom immer noch, dass es sich um einen nullterminierten C-String handelt, und gibt nicht nur das Zeichen aus, auf dass der Zeiger zeigt, sondern auch alle folgenden Zeichen, bis er über ein Nullzeichen stolpert, welches er für das Ende des C-Strings hält.
Dabei kann es je nach Compiler, Einstellungen und Plattformen passieren, dass dir das Programm entweder abstürzt, oder wirre "Schmierzeichen" in der Ausgabe erscheinen.
Alles in allem wird damit aber auf undefinierte Speicherbereiche zugegriffen, weshalb es sich um einen Programmierfehler handelt. Genau diese Art von Programmierfehlern kann man übrigens in Form von Sicherheitslücken ausnutzen, um Schabernack zu treiben, aber das hat jetzt nichts mit der Frage an sich zu tun ...
Wenn du die Adresse von einem char-Zeiger, wie die von einem int-Zeiger, als solche ausgeben willst, dann kannst du einen Cast nach void * nutzen:
cout << static_cast<const void *>(cstr) << endl;
Falls du das alles noch nicht richtig verstehst, lerne einfach immer schön weiter ... irgendwann wird dir das alles sowieso klar werden! :)
Ich kann nur hoffen, dass du keinen Beruf im medizinischen Bereich oder in der Pflege anstrebst, bei dem du Kontakt mit schwer immungeschwächten Patienten (z. B. Krebspatienten während der Chemo) hast.
Denn dann käme deine Weigerung, dich z. B. gegen Meningo- oder Pneumokokken impfen zu lassen, einer fahrlässigen Tötung gleich, für die du mit Sicherheit auch zu Recht im Gefängnis landen wirst.
Deine Freiheit hört dort auf, wo die der anderen anfängt. Also such dir bitte einen anderen Beruf!
Weil sich leider jeder Hampelmann als "Webdeveloper" bezeichnen kann, auch wenn er im Endeffekt nur eine Hand voll JS-Bibliotheken zusammen klickt, und auf die APIs von zich Drittanbietern gleichzeitig zugreift.
Leider ist die Qualität von dem, was selbsternannte Webdeveloper heutzutage abliefern, meistens eine Katastrophe. Dabei ist alles mit Skripten und völlig unnötigen Fremdressourcen überladen, erstmal von völlig überladener Werbung abgesehen.
Es wird immer der heilige "Content" geprädigt, aber im Endeffekt geht das "Design" vor, koste es was es wolle. Guck dir doch einfach mal auf einem Desktop-Rechner die Startseite von GF an. Da wird ein 5MB großes Hintergrundvideo geladen, ohne dass dies irgendeinen praktischen Nutzen hätte. Auf der anderen Seite werden gefühlt 20 Tracker und Skripte von Werbediensten eingebunden.
Ohne AdBlocker kann man heutzutage wirklich gar nicht mehr im Internet unterwegs sein. Das ist reiner Selbstschutz, allein schon, um sich nicht mit Malware zu infizieren.
Google mal nach ASCII-Tabelle. darin sind etwas unter 100 durckbare Zeichen enthalten, die im Regelfall für Passwörter akzeptiert werden.
Falls dir das nicht reicht, suche nach ISO-8859 Zeichentabellen. Davon gibt es mehrere, mit unterschiedlichen Zusammenstellungen europäischer Zeichen. Das sind meisten so um die 200 und da sind u. a. bei z. B. ISO-8859-1 sind die deutschen Umlaute auch enthalten.
Wenn dir das immer noch nicht reicht, dann guck dir die Zeichen des Unicode-Standards an. Darin findest du unter den knapp 60000 ersten Codepoints so ziemlich alle Zeichen der Welt. Alles was darüber kommt sind exotische Zeichen, Fantasiezeichen, Emojis, oder anderer Müll. :)