Ich schrieb den folgenden Code mit der Absicht, Zeigerarithmetik auf Zeichenfolgen zu verwenden, um eine gezielte Teilzeichenfolge zu finden und zu ersetzen. Offensichtlich ist es nicht elegant, aber leider ist es auch falsch - es fügt der Saite irrsinnige Charaktere hinzu.Suchen und Ersetzen einer Teilzeichenfolge (Sprache C)
#include <stdio.h>
#include <string.h>
int main() {
char string[] = "The quick brown fox jumped over the lazy dog.";
char target[] = "brown"
char replacement[] = "ochre";
char segment[80+1];
char pre_segment[80+1];
char post_segment[80+1];
int S = strlen(string), T = strlen(target);
for (int i = 0; i < S; i++) {
strncpy(segment, string + i, T);
if (strcmp(segment, target) == 0) {
>>> strncpy(pre_segment, string, i); <<<
strncpy(post_segment, string + i + T,
S - (i + T));
strcat(pre_segment, replacement);
strcat(pre_segment, post_segment);
printf("%s\n", pre_segment);
}
}
return 0;
}
Nachdem die Zeile wie markiert >>> diese < < <, irrelevante Zeichen wurden Ersatz vorangestellt, bevor ein Austausch mit pre_segment verkettet.
Kann mir jemand Vorschläge zum Debuggen geben? (Vorschläge für eine bessere Lösung sind ebenfalls willkommen, aber bitte versuchen Sie explizit zu sein. Ich sollte auch keine dynamische Speicherzuweisung verwenden.)
„wie dies zu debuggen“? So wie Sie die meisten Programme debuggen würden. Verwenden Sie einen Debugger, um durch den Code zu gehen und den Status zu untersuchen, während Sie fortfahren. – kaylum
@kaylum Ich kann dir sagen, wo es falsch läuft; Ich hatte gehofft, dass jemand, der sachkundiger ist, mir helfen könnte, * warum * zu verstehen. – Chris
Warum erzählst du uns dann nicht, wo es falsch läuft? Das wären nützliche Informationen - damit wir das nicht selber debuggen müssen und auch zeigen, dass Sie es getan haben. Und Sie haben explizit gefragt, wie Sie das debuggen können. – kaylum