Ich habe gerade angefangen zu lernen c. Ich mache eine Übung und die Frage ist wie folgt.Einfügen einer Teilzeichenkette in eine andere Zeichenkette in c
Schreiben Sie eine Funktion namens insertString
, um eine Zeichenfolge in eine andere Zeichenfolge einzufügen.Die Argumente für die Funktion sollten aus der Quellzeichenfolge, der einzufügenden Zeichenfolge und der Position in der Quellenzeichenfolge bestehen, in die die Zeichenfolge eingefügt werden soll . Der Aufruf insertString (text, "per", 10);
mit dem ursprünglich definierten Text "the wrong son"
führt dazu, dass die Zeichenkette "per"
in den Text eingefügt wird, beginnend mit text[10]
. Daher wird die Zeichenkette "the wrong person"
nach der Rückgabe der Funktion im Textarray gespeichert.
#include<stdio.h>
int insertString(char[],char[],int);
int stringLength(char[]);
int main()
{
char text[]="the wrong son";
int result=insertString(text,"per",10);
if(result!=-1)
printf("string 1 is : %s \n",text);
else
printf("Not possible\n");
return 0;
}
int insertString(char a[],char b[],int pos)
{
int i=0,j=0;
int lengthA=stringLength(a);
int lengthB=stringLength(b);
if(pos>lengthA)
return -1;
for(i=lengthA;i>=pos;i--)
a[i+lengthB]=a[i];
for (i = 0; i < lengthB; ++i)
a[i + pos] = b[i];
return 1;
}
int stringLength(char x[])
{
int length=0;
while(x[length]!='\0')
length++;
return length;
}
ich habe dies getan und es funktioniert auch. aber ich erhalte eine Nachricht . Als ich darauf schaute, habe ich gelernt, dass es ein Fehler ist, weil ich in die Erinnerung schreibe, die ich nicht besitze. Da ich Zeichenfelder mit variabler Länge verwendet habe, wo auch immer die null character
ist, zeigt das Ende des Arrays und ich versuche, es durch Einfügen einer Zeichenfolge zu erweitern, das ist mein Verständnis. bin ich soweit richtig?
Ich verschiebe auch die null character
. Ich weiß nicht, ob es richtig oder falsch ist.
also gibt es eine Möglichkeit, um diesen Fehler zu umgehen? Auch, Ich kenne Zeiger noch nicht und sie sind im nächsten Kapitel des Lehrbuchs.
Jede Hilfe in diesem würde sehr geschätzt werden.
Sie verwenden nicht "variable length character arrays". Sie müssen entweder genügend Platz für Ihr Endergebnis im Voraus reservieren, oder Sie müssen zugewiesenen Speicher verwenden und möglicherweise neu zuweisen. Suchen Sie nach Verweisen auf 'malloc()' und 'realloc()'; – Logicrat
"Ich habe Zeichenfelder mit variabler Länge verwendet" wo? 'char a []' im Funktionskopf ist kein Array variabler Länge. –
oh ist es? @Logicrat. In dem Lehrbuch ist angegeben, dass die Zeichenarrays, die mit einem "Nullzeichen" enden, Zeichenfolgen variabler Länge – yash