# [c] Variablen verbinden?



## Lark (7. Mai 2004)

Hallo,
ich habe jetzt schon einige Zeit rumprobiert und gesucht habe aber nichts gefunden.
Wenn hier dennoch ein Thread ist der meinen ähnlich ist und mein Problem löst würde ich euch bitten mich auf diesen Thread zu verweisen.

Also meine Frage ist, wie kann ich mehrer Variablen verbinden?
Also das der wer der z.b in a und b enthalten ist in c abgelegt wird.

Danke schon mal im vorraus.
MfG
Lark


----------



## basd (7. Mai 2004)

> Also das der wer der z.b in a und b enthalten ist in c abgelegt wird.



Was willst du  Bitte eine einduetige Frage definieren !


```
c = b =a ; // ?
```


----------



## Lark (7. Mai 2004)

ne, Schuldigung hätte mich noch etwas präzieser ausdrücken sollen.

Also in a ist z.b. ein dokument name enthalten (test) und in b ist die datei endung enthalten(.txt).
Jetzt möchte ich das a und b praktisch kombinieren so das text.txt rauskommen würde.

ich hoffe das ist etwas verständlicher.


----------



## revelation (7. Mai 2004)

Hallo!

Du möchtest also Strings verketten?!

Da gibt es aber einen Berg an Möglichkeiten, wie man das machen kann! (Abhängig welche Art von Strings man Benutzt...)

Worin speicherst du denn "text" oder ".txt" - In char-Arrays, oder in CString-Objekten? (Ja, ich habe gelesen das im Titel NUR 'C' steht)

Poste doch bitte mal den Code den du hast.

Gruß
Johannes


----------



## Lark (7. Mai 2004)

```
#include <stdio.h> 


void main (void)  
{ 
    char *var="name";
    char *name;
    char *endung=".txt";
    
    //variablen verketten.....
    printf("%s\n",name);
    system("PAUSE");
 }
```

im groben ist es das was ich habe.


----------



## Kachelator (7. Mai 2004)

Ich weiss, da steht c im Titel, also ignorier mich, wenn ich OT bin. Aber probier mal dieses (Ist allerdings C++, nicht C):


```
#include <string>

void main (void)  
{
  using namespace std;
  string var    = "name";
  string endung = ".txt";
  string name   = var + endung;
  
  printf( "%s\n", name.c_str() );
  system("PAUSE");
}
```

Das behebt schon mal die Textverkettung. Ist zwar an ein paar anderen Stellen noch nicht perfekt, aber man kann damit arbeiten.


----------



## revelation (7. Mai 2004)

Hi Lark!

Also in der C-Runtime-Library gibt es Funktionen mit denen sich das machen lässt:
	
	
	



```
#include <stdio.h>
#include <string.h> 


void main (void)  
{ 
    char *var="name";
    char name[255];
    char *endung=".txt";
   
    //variablen verketten.....
	strcpy(name, var);
	strcat(name, endung);

    printf("%s\n",name);
    system("PAUSE");
 }
```
Mann könnte natürlich auch die Größe von name dynamisch an die Summe der Längen von var und endung anpassen, aber vielleicht ist das aber noch ein bisschen schwer....

Würde so gehen:
	
	
	



```
#include <stdio.h>
#include <string.h>
#include <malloc.h> 


void main (void)  
{ 
    char *var="name";
    char *name;
    char *endung=".txt";
   
    //variablen verketten.....
	name = (char *) calloc(strlen(var) + strlen(endung) + 1, sizeof(char));
	strcpy(name, var);
	strcat(name, endung);

    printf("%s\n",name);

    free(name); //Speicher freigeben
    system("PAUSE");
 }
```
Falls du Letzteres nicht verstehen solltest, nimm lieber den anderen Ansatz!

Hoffe dir geholfen zu haben,
Johannes


----------



## Lark (8. Mai 2004)

Sehr gut, danke.
Die 2 Variante von revelation funktioniert die 1 nicht und die von Kachelator auch nicht.

Könntest du vieleicht die 2 Varianten noch mal kurz erkläten ganz durch blicken tu ich da net.

Danke.


----------



## revelation (8. Mai 2004)

Also was mich jetzt aber wirklich ärgert, ist deine Antwort:





> Die 2 Variante von revelation funktioniert die 1 nicht und die von Kachelator auch nicht.


Du hast wahrscheinlich einfach alle einmal kopiert, kompiliert und dann bei zwei von denen eine Fehelermeldung bekommen! Das lag aber NUR daran, weil wir vergessen haben die <stdlib.h> zu includen und bezog sich NUR auf system("PAUSE");! - Die eigentlich wichtigen Teile funktionieren ALLE drei! (Bei meiner zweiten Lösung hattest du glück: Mit der <malloc.h> wird auch die Definition der system-Funktion included!)

Beschäftige dich mal mit dem Thema, such bei Google oder direkt hier im Forum! (Stichwörter: strcpy, strncat, malloc, free, char-array)!

Leute, lernt verdammt nochmal die Grundlagen des Programmierens BEVOR ihr hier hingeht und dann um fertige Codeschnipsel bettelt, die ihr dann ohne sie zu verstehen einfach kopiert!

Sorry, musste einfach mal sein! (Hört sich härter an als gemeint!)

Gruß
Johannes


----------



## Lark (8. Mai 2004)

Da muss ich dir , glaube ich, leider wiedersprechen da ich system("PAUSE"); schon des öfteren benutzt habe ohne die <stdlib.h> oder  <malloc.h> einzubinden.


Auch wenn ich die beiden Librarys eingebunden habe funktionieren beide Möglichkeiten nicht.

Kachelators Möglichkeit gibt  " 'string' undeclared (first use in this function)" aus.

Bei deinem Ersten Vorschlag wird keine Fehlermeldung ausgeben und die Anwendung wird einfach wieder geschlossen ohne irgend eine Ausgabe.

Ausserdem darf ich wohl von mir behaupten das ich die Grundlagen des Programmierens kann, da ich mittlerweile ca. 1 Jahr PHP programmiere.
Nur C habe ich gerade erst angefangen.
Aussderm bin ich nicht der Typ der einfach was kopiert und sich nichts dabei denkt, normaler weise versuche ich das Problem auf eigene Faust zu lösen.
Nur diesmal war ich halt auch mal "überfordert".
Da Kachelator dabei geschrieben hat das dies eine Möglichkeit von C++ ist und nicht unbedingt C darum habe ich mir gedacht das es daran liegen würde.
Und bei deiner ersten Variante wurde nichts ausgeben, also keine Fehlermeldung und nichts wurde Ausgeben, womit ich dann selber gerade als C Anfänger relativ wenig mit Anfangen kann.

Ausserdem weiß ich nocht nicht was in welcher Libary steht.
Wäre euch dankbar wen ihr mir da evtl. ein Link zugeben würdet.

MfG
Lark


----------



## revelation (8. Mai 2004)

OK... Dann hat es dieses Mal den Falschen getroffen! - Sorry!

Welchen Compiler benutzt du denn?
Ich habe nach deinem Post alle drei Möglichkeiten unter VS 6.0 und Dev-C++ (Mingw) getestet: Liefen alle ohne Fehler, wie ich es erwartet hatte!

Wenn sich das Fenster sehr schnell wieder schließt heißt das nicht, dass da vorher nicht die richtige Ausgabe stand .
Versuch vielleicht mal getchar(); anstatt system("PAUSE");!

Gruß
Johannes


----------



## Lark (8. Mai 2004)

Jo kein Problem.

Ich benutze den Dev C++ 4.9.8.0 Compiler.

Ok, es ist aufjeden fall keine Ausgabe zuerkennen. 

Wenn ich nur getchar(); benutze ändert sich nichts.

Edit:
Hab mích gerade noch mal mit strcat beschäftig und es funktioniert jetzt.
Nur Kachelators Variante noch nicht.


----------



## revelation (8. Mai 2004)

Lass die am besten ersteinmal aussen vor!
Fang erst mal klein mit C an und wechsel an zu C++ wenn du wirklich fit in C bist!

Gruß
Johannes

PS: Woran lags denn?


----------



## Kachelator (8. Mai 2004)

> Fang erst mal klein mit C an und wechsel an zu C++ wenn du wirklich fit in C bist!


  Man kann sich darüber streiten, ob das der richtige Ansatz ist, aber schaden wird es wohl nicht.


----------



## frager (8. Mai 2004)

Du wolltest genauer wissen was man mit 'calloc' machen kann.
Mit calloc kannst du dynamisch speicher für arrays allokieren.
Der erste Parameter gibt die anzahl der elemente im array an, in deinem fall
ist das die länge des ersten strings plus die länge des zweiten und noch ein platz für eine null am ende. Der zweite Parameter gibt die größe eines elements des arrays in bytes an ( sizefo(char) ). Zurückgegeben wird ein zeiger auf den allokierten speicher (void*). Dieser muss dann in den richtigen datentyp umgewandelt werden. Calloc hat außerdem die eigenschaft dass er im gegensatz zu malloc alle elemente des allokierten arrays mit 0 initialisiert.
So, das wars, ich hoffe das hilft dir ein bisschen weiter


----------



## Lark (8. Mai 2004)

> _Original geschrieben von revelation _
> 
> PS: Woran lags denn?




ich habe einen pointer benutzt und kein Array.


----------



## FunBox007 (29. Juni 2009)

Ich würd das ganze ja so machen...


```
#include<string>
#include<iostream>

using namespace std;

int main()
{
    string var    = "name";
    string endung = ".txt";
    string name   = var + endung;
    cout<<name<<"\n";
    system("PAUSE");
}
```

Ich denke das ist für Anfänger leichter als die Lösung von Kachelator,

```
#include <string>

void main (void)  
{
  using namespace std;
  string var    = "name";
  string endung = ".txt";
  string name   = var + endung;
  
  printf( "%s\n", name.c_str() );
  system("PAUSE");
}
```


----------



## vfl_freak (29. Juni 2009)

Moin,

stimmt, das sieht gut aus 
Sollte sich aber nach über 5 Jahren wohl erledigt haben ..... ;-]

Gruß
Klaus


----------

