zwei char array Felder zu einem String verknüpfen
-
Ich nutze hier mal die Stunde der Gunst um mal eine andere (WinAPI) Variante zu präsentieren:
char Target[512]; ZeroMemory(Target, sizeof(Target)); _snprintf(Target, sizeof(Target) - 1, "%s%s", str1, str2); // Bei neueren Compilern auch durch _snprintf_s zu ersetzen !!!
-
@supertux
Eigentlich wollte ich hier nichts mehr drauf antworten, aber bei so viel Sturheit
kann ich einfach nicht anders.1. Zum einen kenne ich sehr wohl die Unterschiede zwischen ANSI C und C++.
Ich bin schon etwas älter und damit groß geworden (von AmigaDos, UNIX,
MSDOS auf Win95/98 zu Linux heute).2. Verdrehe mir nicht die Worte im Mund.
"...C (mit Betonung auf C) muss man nicht kasten..."
Was anderes habe ich nicht behauptet. Wenn du meinen Post aufmerksam gelesen hättest stand das da
(gleich oben "...nur eben nicht unbedingt notwendig..."). Ich meine nur das es besser ist es von Anfang an zu machen, da es oft notwendig werden kann (und später in C++ dann sogar gefordert wird) und dann kommt es oft zu Verwirrungen, wenn man es vergessen hatte.
Und C (mir Betonung auf C) macht gar nichts automatisch, sondern es konvertiert einfach in
den Typ der vorne steht. Red mir also nicht "im C99 Standard" definiert, ließ ihn besser erstmal.3. "...ist generell eine schlecht Idee C Code durch den C++ Compiler zu jagen"
Nein, es ist keine Schlechte Idee gleich richtig zu Casten, da es wie gesagt in C++ Pflicht wird. Und wenn einer deinen "tollen" Quellcode mal in C++ übernehmen möchte, dann hat er mit so einer Haltung von dir arge Probleme. Was nützt dir ein Code der nur unter reinem C läuft. Hättest du den Cast von Anfang an gesetzt, dann wäre es für die Koder nach dir wesentlich einfacher. Es gleich mit einem C++ Compiler zu testen (mit Betonung auf testen) ist dann wohl der bessere Ansatz. C (mir Betonung auf C) läd nämlich zum schlampigen programmieren geradezu ein. Deswegen ist C99 dann auch deutlich strenger geworden.Ich unterstelle mal du hast noch nicht in größeren Softwareprojekten mitgearbeitet oder gar ältere C-Codes konvertieren müssen, sonst wüsstet du das.
Das deutet jedenfalls alles darauf hin:
"...und die Compiler halten sich dran..." - in welcher heilen Welt lebst du?
MSVC unterstützt bis Version 2008 das C99 nicht vollständig (weiß nicht ob er es inzwischen wirklich vollständig beherrschst). Dein Nickname suggeriert mir Linux (only?). Wirklich Plattform übergreifenden Code zu schreiben ist gar nicht so einfach.Ich denke es ist besser von Anfang an gleich beide Welten im Auge (also C/C++) zu behalten. Und einem C-Anfänger zu reinem C (mir Betonung auf C) zu drängen ist totaler Unsinn meiner Meinung nach. Das führt dann dazu, dass es massenweise Literatur gibt, bei der die abgeschriebenen Quelltexte nicht laufen
und die Anfänger ihre Lust verlieren, da der Autor der Meinung war: "Muss man nicht - dann lass ich es halt weg.".Gruß
Trooper
-
ich habe noch nie einem Anfänger (und einem reinen Programmieranfänger schon gar nicht) C empfohlen und das werde ich auch nicht tun, obwohl C meine Lieblingssprache ist und mich damit am besten auskenne, deshalb kenne ich C-Schwächen auch gut.
Ich musste bis jetzt zum Glück nicht an große Projekte arbeiten, wo man Windows/Unix portabel sein muss, also muss ich zugeben, dass ich da wenig Erfahrung habe. Unter Linux verwenden ich (und meine ganze Abteilung) den GNU GCC Compiler und unseren Code ist nicht dafür ausgelegt, dass er überall und mit jedem Compiler läuft, also Gedanken in der Art "ob das mit dem MSVC auch läuft..." musste ich mir während der Arbeit nicht machen, das geb ich zu.
Ich persönlich halte ich für eine schlechte Idee, C Code komplett in C++ zu übernehmen, nicht nur wegen den Casts, sondern weil es noch andere Inkompatibilitätsprobleme gibt, die nicht immer bekannt sind und auch der Compiler dir nicht verrät. Warnt dir etwa der C++ Compiler, dass
sizeof 'a'
1 ist und nicht 4 wie in C?#include <stdio.h> int main(void) { printf("C%s\n", sizeof(char) == sizeof('a') ? "++" : ""); return 0; }
$ gcc -oc c.c $ ./c C $ g++ -oc c.c $ ./c C++
http://david.tribble.com/text/cdiffs.htm deshalb finde ich es für eine schlechte Idee.
Vielleicht ist der GCC Scheiße, aber beim Code
include <stdlib.h> int main(void) { int *var; var = malloc(10 * sizeof *var); free(var); return 0; }
kriege ich nicht einmal mit den CFLAGS="-std=c99 -ansi -pedantic -Wall" eine Warnung.
-
@supertux
Portablen Code schreiben ist mit vielen Problemen verbunden. Manchmal wundere ich mich auch, dass alter Code unter Unix überhaupt lief. Jeder bei uns in der Abteilung schüttelt dann oft angewidert den Kopf. Es hilft alles nichts, der Kunde möchte das Programm unter Windows oder Linux (Mac kommt eher selten vor) - dann bekommt er es halt. Es tat jahrelang problemlos seinen Dienst unter Unix.Neulich hatte ich ein C++ Programm, dass lieft auf MSVC prima und unter GCC gab es in einer Funktion jedes mal ein anderes Ergebnis. Zufall war da aber
nicht dabei?! Im Endeffekt haben wir den Code komplett eingestampft und neu geschrieben - dann lief es. Andersherum gab es aber auch oft Probleme. Ich könnte mir dann auch eine bessere Aufgabe vorstellen, nur irgendwer muss es ja tun. Dass das alles keine gute Idee ist, da gebe ich dir Recht.Was ich damit sagen möchte ist, dass es manchmal ganz gut ist an die Programmierer nach einem zu denken. Am Besten finde ich Code, der schreibt dass die Funktion XYZ nicht die Beste Wahl war, aber der Programmierer sich dafür entschieden hatte weil ... . Vieles kann man dann nachvollziehen. Und es ist auch irgendwie toll, wenn nach mehr als 10 Jahren irgendwer anruft und nach den Quelltexten für dein Projekt fragt, oder? Zumindest hast du dann nichts für die Mülltonne entwickelt.
Bei uns im Team hat jeder seinen eigenen Programmierstil - und das ist gut so. Durch die andere Sichtweise des Kollegen findet der manchmal Fehler besser oder andersrum. Ich finde gut, dass du keinem Anfänger mehr reines C empfiehlst.
Ich hoffe wir sind nun zu einem gemeinsamen Konsens gekommen.
Viele Grüße
Trooper
-
Meine Güte, hier sagen dir Profis wo es lang geht und du meckerst immer noch...tztztz
-
hahahahahaah hahahahahaha hahahahaha
Das ist das wahre Bild der Experten hier! Fangt von vorne an und lernt die Bedeutung von Reihenschaltung, Wechselschatlung, Spannung, Strom und Widerstand!
-
trooper schrieb:
bla bla bla
trooper schrieb:
Ich finde gut, dass du keinem Anfänger mehr reines C empfiehlst.
trooper schrieb:
Ich hoffe wir sind nun zu einem gemeinsamen Konsens gekommen.
-
supertux schrieb:
Vielleicht ist der GCC Scheiße, aber beim Code
:p
-
Erklärt den super trooper doch einmal dass ANSI-C nicht 100% mit der Teilmenge von C in C++ übereinstimmt und C++ Compiler nicht ohne weiteres reines ANSI-C kompilieren. Vielleicht kann ja auch er noch lernen. Frech finde ich ja seine Reaktion auf die Belehrung, scheint so ein bisschen beratungsresistent zu sein. Auf jeden Fall hat er noch viel zu lernen, nicht nur über C und C++ sondern auch in Punkto Sozialverhalten. Mein Sohn ist 5 und verhält sich ähnlich bei Kritik.
-
Hinweis schrieb:
Erklärt den super trooper doch einmal dass ANSI-C nicht 100% mit der Teilmenge von C in C++ übereinstimmt und C++ Compiler nicht ohne weiteres reines ANSI-C kompilieren.
iwie bekommens gelegentlich schon hin aber manchmal hauens dir solche "bugs" rein die man ohne es zu wissen kaum findet...
-
Hi lachmalwieder
=Ministerium-Heimatschutz=sagt_alles=#######z.01########=Hinweis=*eek*?!Auch der Post ist Geschichte.
Aber wenn es dir danach besser geht.
Nur zu...
-
wozu diesen Thread ausgraben? Wir haben alles ausdiskutiert.