[C] - String in 2. String an bestimmter Position einfügen

Ok das verstehe ich jetzt schon mal mit der Arrayübergabe...

Geändert hab ichs jetzt nach deinen Vorgaben, allerdings gleich für beide Char parameter:

Code:
int main()
{
	char ziel[100] = "Hello";
	char einfuege[100] = "World";
	printf("%d",strInsert("ziel","einfuege",4));
	system("pause");
	return 0;
}.......
Rest hab ich so gelassen!

jetzt wenn ich den Code aber Laufen lasse, kommt bei der Anweisung in der ersten For-Schleife nun der Fehler...

?
 
Du hast das noch nicht mit der Array-Übergabe verstanden.

C:
printf("%d", strInsert("ziel", "einfuege", 4));

legt 2 neue String-Literale an. Um die Arrays zu übergeben musst du die "" um ziel und einfuege in Zeile 5 weg lassen.
 
Du hast das noch nicht mit der Array-Übergabe verstanden.

C:
printf("%d", strInsert("ziel", "einfuege", 4));

legt 2 neue String-Literale an. Um die Arrays zu übergeben musst du die "" um ziel und einfuege in Zeile 5 weg lassen.


ah shit... verdammt bin ich doof!

jetzt funktionierts jawoll, vielen dank!

Was müsst ich aber ez machen, dass ich Beispielsweise den neuen String auszugeben ?
Wenn ich mich jetzt nicht täusche ist hier ja der Rückgabetyp int weil ich die Länge der zwei Strings zurückgeben lassen soll^^!
Damit ich den String bekomme, kann ich dann wahrscheinlich nicht einfach sagen: (schon versucht)
printf("%s",str1);

aber die zwei einzelnen Strings befinden sich doch nun in str1 ?
 
Da das ja alles auch eine Übungsaufgabe sein soll, vielleicht so erstmal ein paar Tipps zu einem String.

Grundsätzlich hast du Recht: Mit dem "%s" gibst du printf an, dass du einen String ausgeben lassen willst. Für Strings gilt aber, dass ihr Ende, also direkt hinter dem letzten Buchstaben, ein spezieller Character stehen sollte, der das Ende des Strings definiert. Vielleicht guckst du mal in diese Richtung weiter.

Gruß,
Wolf
 
ok also ich weiß das hinter einen String das " \0 " stehen muss, dass der Compiler weiß das es sich dabei um einen String handelt ?

da ich also bei der Aufgabe jetzt den String 2 in String1 einfüge überschreibe ich diese jetzt ? und müsste noch nen Befehl mit reinbringen welcher sagt das nach Fertigstellung des zusammenhängens wieder die '\0' rangehängt wird ?
 
so nach einigem lesen und probieren kommt nun eig. das gewünschte Ergebnis raus!

stimmt das, wenn ich zuletzt vor der return Anweisung nur noch das
Code:
		for(j=0;j == '\n' ; ++j)			
			str1[j] = '\0';

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

einfüge?

ODER ist das nicht der richtige Weg ?
 
Geändert hab ichs jetzt nach deinen Vorgaben, allerdings gleich für beide Char parameter:
Für den zweiten Parameter ist das unnötig. Der wird nicht geändert und kann auch ein Stringliteral sein. Änder am besten den Typ des zweiten Parameters in "const char*" ab.

so nach einigem lesen und probieren kommt nun eig. das gewünschte Ergebnis raus!

stimmt das, wenn ich zuletzt vor der return Anweisung nur noch das
Code:
		for(j=0;j == '\n' ; ++j)			
			str1[j] = '\0';

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

einfüge?

ODER ist das nicht der richtige Weg ?
Nein, das ist nicht richtig.

Der übergebene Ziel-String wird doch verändert, den mußt du in der main Funktion dann einfach nur ausgeben.
C:
puts(ziel);
 
ok danke jetzt dazu aber noch eine Frage...

was ist nun der Unterscheid zwischen puts und printf ? ich hab schon ein weniggelesen und seh darin nur das es puts die schnellere Ausgabevariante ist, weil der Format String nicht mehr interpretiert werden muss?

Wann sollte ich also printf nehmen und wann ist puts vorzuziehen ?
 
Du schreibst es ja schon.

puts kann Strings ausgeben. Nicht mehr und nicht weniger.
Das kann einer sein, der einfach so hingeschrieben wird "Hallo Welt"
oder eine Variable der Art char[] uÄ.
C++:
puts("Hallo");
puts(ziel); //Variable ziel von oben

printf kann zunächst mal das Gleiche.
C++:
printf("Hallo");
printf(ziel); //Variable ziel von oben
Was printf aber noch kann:
Wenn man in diesem String Zeug wie %s, %d, %f usw. drin hat
heißt das "Setz dort Variablen vom Typ String/(Dezimal-)int, float... ein"
Die Werte/Variablen dafür werden zusätzlich übergeben.
C++:
float f;
...
printf("Das ist ziel: %s, das ist ein Dreier: %d, das ist im float f: %f", ziel, 3, f);
puts kann sowas nicht.
Wenn man keine Variableneinsetzungen macht muss printf aber trotzdem
alles nach % durchsuchen (findet nur keine).
Damit ist printf langsamer als puts.


Noch ein Punkt:
C++:
puts(ziel)
printf(ziel);
Wenn jetzt in ziel %-Zeichen vorkommen,
und man meint aber keine Variableneinsetzung, sondern wirklich nur Prozent:
puts hat damit kein Problem.
printf wird versuchen, irgendwas einzusetzen, obwohl es nichts übergeben bekommen hat
->Problem.
 
Zurück