strcat () vs sprintf ()

8

Was wäre schneller? Dies:

%Vor%

oder

%Vor%

Gibt es einen Leistungsunterschied?

    
lxe 20.11.2009, 18:53
quelle

5 Antworten

21

strcat wäre schneller, weil sprintf zuerst die Zeichenfolge nach Formatvariablen durchsuchen muss.

Aber der wahre Gewinn ist die Tatsache, dass jeder weiß, was strcat macht - Verkettung von Strings. Die Verwendung von sprintf für die Verkettung ist keine Standardverwendung. Und es würde dazu führen, dass die Leute einen Doppelklick machen.

    
Justin Rudd 20.11.2009 18:56
quelle
10

Angesichts der Wahl zwischen den beiden würde ich strcat ; es ist sicherlich lesbarer und macht deine Absichten deutlich. Es könnte auch etwas schneller sein als sprintf , aber wahrscheinlich nicht viel.

Aber unabhängig davon, welche Methode Sie wählen, sollten Sie unbedingt snprintf oder strncpy für den Pufferüberlaufschutz verwenden.

Sie haben diese Frage sowohl als c als auch als c++ getaggt; Wenn Sie C ++ verwenden, wäre es viel besser, stattdessen ein std::string zu verwenden.

    
James McNellis 20.11.2009 18:56
quelle
6

Wenn es einen Unterschied gibt, variiert dieser Unterschied entsprechend den Compiler-Flags, der Computerbenutzung zum Zeitpunkt der Codeausführung, der Bibliotheksimplementierung, ..., ...

Für Ihren speziellen Fall messen .
Führen Sie beide Schnipsel einige Milliarden Mal aus und geben Sie ihnen Zeit.

Ich bezweifle sehr, dass Sie einen signifikanten Unterschied finden werden.

Ich mag strcat() besser: es vermittelt deutlich die Bedeutung des Codes.

    
pmg 20.11.2009 18:57
quelle
1

Ich stimme anderen zu: strcat() sollte schneller sein. Aber für "Best-Practice", wenn Sie wirklich auf Geschwindigkeit achten, sollten Sie keines von beiden verwenden. Du solltest eine Struktur wie:

haben %Vor%

, um das Ende der Zeichenfolge zu verfolgen. Wenn Sie eine Zeichenfolge anhängen, springen Sie einfach zum Ende und kopieren Sie sie. Double max , wenn der zugewiesene Speicher nicht groß genug ist. Alternativ können Sie etwas Phantasie haben, indem Sie len , max und str zusammenpacken.

    
user172818 21.11.2009 03:35
quelle
1

strcat ist in diesem Fall viel schneller. Denken Sie daran, dass sprintf() die Formatzeichenfolge Zeichen für Zeichen nach% Escapes durchsucht. Vergleichen Sie dies mit:

%Vor%

zum Beispiel.

    
Paul Hsieh 20.11.2009 19:17
quelle

Tags und Links