3 Stimmen

Verkettung von Zeichenketten mit strcpy

Hier ist mein Code

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

int main() {

 char f[] = "First";
 char s[] = "Second";
 char *tmp = malloc(strlen(f) + strlen(s) + 2);
 strcpy(tmp, f);
 strcpy(tmp, s);
 printf("%s", tmp);
 free(tmp);
 return 0;
}

Ich versuche, f und s zu verketten. Das Problem ist, dass tmp nur "Second" als Array enthält. Was ich hier vermisse

1voto

Hier ist die korrekte, idiomatische und sichere Art, das zu tun, was Sie wollen:

size_t l = strlen(f);
char *tmp = malloc(l + strlen(s) + 1);
strcpy(tmp, f);
strcpy(tmp+l, s);

oder:

size_t l = strlen(f) + strlen(s) + 1;
char *tmp = malloc(l);
snprintf(tmp, l, "%s%s", f, s);

Ich neige dazu, Letzteres zu bevorzugen, es sei denn, Sie schreiben Code für eingebettete Systeme, bei dem Sie vermeiden möchten, dass Sie in printf Abhängigkeit.

Schließlich ist zu beachten, dass Sie folgende Tests durchführen sollten malloc und dass es sinnlos und schädlich ist, Speicher zu reservieren und die Zeichenketten zu kopieren, wenn man sie nur ausdrucken will - man könnte einfach Folgendes tun:

printf("%s%s", f, s);

1voto

Sun Keqin Punkte 43

Verwenden Sie stattdessen strcat(), was laut MSDN-Doku das Anhängen einer Zeichenkette bedeutet. strcpy() bedeutet lediglich das Kopieren einer Zeichenkette. Wenn Sie strcat() nicht verwenden wollen, sollten Sie die Position mit strncpy() oder strcpy_s() angeben. Bitte lesen Sie dazu das Dokument.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X