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

SuumDaHead

Mitglied
Hallo Leute :)

ich hab da wieder ne Aufgabe dich versucht hab zu lösen!

Hier mal die Aufgabe:
Definieren Sie eine Funktion strInsert, die einen String an einer bestimmten Position eines anderen Strings einfügt. Die Funktion enthält drei Argumente:
1. der String, in den eingefügt wird,
2. der einzufügende String und
3. die Einfügeposition.
Dabei bedeutet die Position 0, dass der zweite String vor dem ersten eingefügt wird.
Die Funktion gibt die neue länge des ersten Strings zurück. Falls die Einfügeposition ungültig sein sollte, d.h. negativ oder länger als die Länge des ersten Strings, ist der Wert -1 zurückzugeben

Nun meine versuchter Lösungsansatz:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int strInsert(char str1[], const char str2[], int pos )
{
	int len1 = (int)strlen(str1);
	int len2 = (int)strlen(str2);
	int i, j;

	if(pos < 0 || pos > len1)
		return -1;
	if(len2 == 0)
		return len1;
	for(i = len1, j = len1 + len2; i>=pos; --i, --j)
		str1[j] = str2[i];
	for(i = 0, j = pos; str2[i] != '\n'; ++i, ++j)
		str1[j] = str2[i];
	return len1 + len2;
}

Wär von euch wieder jemand so freundlich und könte mir sagen wo Fehler sind oder ob das ganze funktioniern würde ?
Mfg Summi:)
 
ja also wenn ich ichs laufen lass kommt bei zeile 16 nach der ersten for schleife ne laufzeitunterbrechung aber versteh nicht ganz warum ?
 
Hi,

wie sieht denn die genaue Fehlermeldung aus? Ich tippe im Moment darauf, dass das Array str1 genauso lang ist wie der String, der in dem Array liegt? Wenn dem so ist, wirst du wohl ein Problem haben auf str1[ j ] zu zu greifen, wenn du j mit len1 + len2 initialisierst.

Gruß,
Wolf
 
@deepthroat. wie was meinst du mit unter den tisch fallen hast lassen ?

also der laufzeitfehler ist:
"Unbehandelte Ausnahme bei 0x00f11469 in 1_1.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00f15751"

also bin jetzt nochmal Schritt für Schritt durchgegangen: 1

also 1. denk ich hier bei
Code:
str1[j] = str2[i];
muss es
Code:
str1[j] = str1[i];
heißen , ooder ?

und unten hab ich nen Fehler glaub ich bei
Code:
for(i = 0, j = pos; str2[i] != '\n'; ++i, ++j)
muss es
Code:
str2[i] != '\0'
heißen

aber das war noch nicht alles, weil wenn ich das verbessere kommt immernoch der Fehler
 
Hallo,

ich denke eher, dass das Array dass du an deine Funktion übergibst und auf das du in der Funktion als str1 zugreifst, einfach zu klein ist. Du versuchst dann in Zeile 16 in ein Feld im Array zu schreiben, dass es nicht gibt (j ist größer als die Größe des Arrays).

Das meinte deepthroat damit, dass du den Code unter den Tisch hast fallen lassen. Wir wissen wie die aufgerufene Funktion aussieht, aber nicht, wie die Funktion aussieht, die strInsert aufruft und in der die Arrays angelegt werden, die du als Parameter übergibst.

Gruß,
Wolf
 
@deepthroat. wie was meinst du mit unter den tisch fallen hast lassen ?
Im Allgemeinen heißt das: poste ein vollständiges Minimalbeispiel - ein komplettes Programm, inkl. main Funktion usw.
also 1. denk ich hier bei
Code:
str1[j] = str2[i];
muss es
Code:
str1[j] = str1[i];
heißen , ooder ?
Ja.

und unten hab ich nen Fehler glaub ich bei
Code:
for(i = 0, j = pos; str2[i] != '\n'; ++i, ++j)
muss es
Code:
str2[i] != '\0'
heißen
Ja.

aber das war noch nicht alles, weil wenn ich das verbessere kommt immernoch der Fehler

Zeig deinen Code.
 
C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int strInsert(char str1[], const char str2[], int pos );

int main()
{
	printf("%s",strInsert("Hello","World",4));
	system("pause");
	return 0;
}

int strInsert(char str1[], const char str2[], int pos )
{
	int len1 = (int)strlen(str1);
	int len2 = (int)strlen(str2);
	int i,j;

	if(pos < 0 || pos > len1)
		return -1;
	if(len2 == 0)
		return len1;
	for(i = len1, j = len1 + len2; i >= pos  ;--i, --j)
		str1[j] = str1[i];
	for(i = 0, j = pos; str2[i] != '\0'; ++i, ++j)
		str1[j] = str2[i];

	return len1+ len2;
}
 
Zuletzt bearbeitet von einem Moderator:
C++:
	printf("%s",strInsert("Hello","World",4));
Wie bereits vermutet.

Du übergibst dort Stringliterale. Das ist doppelt problematisch:

1. Stringliterale sind nicht änderbar (Typ: const char*)
2. Ein Stringliteral besitzt keinen zusätzlichen Speicherplatz den du nutzen könntest um noch etwas anzuhängen

Außerdem ist dein Formatstring falsch.

Du mußt ein "echtes" Array verwenden:

C++:
char ziel[100] = "Hello";

printf("%d\n",strInsert(ziel,"World",4));
 

Neue Beiträge

Zurück