Hi Ich versuche, String in Position N mit C einzufügen. Also habe ich eine Funktion entwickelt, die gut funktioniert, aber das Problem ist, dass ich einmal arbeite. Dies ist mein Code:Funktion wird nur einmal ausgeführt C
char *substring(char *string, int position, int length)
{
char *pointer;
int c;
pointer = (char*) malloc(length+1);
if(pointer == NULL)
exit(EXIT_FAILURE);
for(c = 0 ; c < length ; c++)
*(pointer+c) = *((string+position-1)+c);
*(pointer+c) = '\0';
return pointer;
}
void insert_substring(char *a, char *b, int position)
{
char *f, *e;
int length;
length = strlen(a);
f = substring(a, 1, position - 1);
e = substring(a, position, length-position+1);
strcpy(a, "");
strcat(a, f);
free(f);
strcat(a, b);
strcat(a, e);
free(e);
}
int main(void) {
char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
char msg1 [] ="Good morning mr ";
char msg2 [] ="Good evening mr ";
insert_substring(msg1,username,17);
printf("%s\n",msg1);
insert_substring(msg2,username,17);
printf("%s\n",msg2);
return 0;
}
Die Programmanzeige eine Nachricht an:
Guten Morgen Herr XXXXX
Was ich bemerke, dass das Programm führt keine Anweisung nach der zweiter Aufruf von insert_substring. Und es wird kein Fehler angezeigt. Vielleicht ist es ein Problem der lokalen Variablen In Funktionen
Was ist 'UNLEN'? –
Die Arrays 'msg1' und' msg2' sind gerade groß genug, um zu den Strings zu passen, mit denen sie initialisiert werden (natürlich mit dem Terminator). Der Versuch, an diese Arrays anzuhängen, schreibt * außerhalb der Grenzen * und führt zu * undefiniertem Verhalten *. –
Hmm Sure 17 ist richtig als _length_? – chux