Ich benutze ein Skript mit dem SDK Gracenote (GNSDK) für die Audioerkennung einer Datei (Fingerabdruck).Escape doppelte Anführungszeichen in Gracenote GNSDK Skript
Das Skript funktioniert korrekt, ich möchte nur die Anführungszeichen in einer Variablen zu entkommen.
ich diese Funktion gefunden:
void str_replace(char *target, const char *needle, const char *replacement)
{
char buffer[1024] = { 0 };
char *insert_point = &buffer[0];
const char *tmp = target;
size_t needle_len = strlen(needle);
size_t repl_len = strlen(replacement);
while (1) {
const char *p = strstr(tmp, needle);
// walked past last occurrence of needle; copy remaining part
if (p == NULL) {
strcpy(insert_point, tmp);
break;
}
// copy part before needle
memcpy(insert_point, tmp, p - tmp);
insert_point += p - tmp;
// copy replacement string
memcpy(insert_point, replacement, repl_len);
insert_point += repl_len;
// adjust pointers, move on
tmp = p + needle_len;
}
// write altered string back to target
strcpy(target, buffer);
}
ich hier verwenden wollen habe ich den Eindruck, dass der Variablentyp unterschiedlich ist, aber ich weiß nicht, wie (gnsdk_cstr_t am Anfang und Saibling in Funktion str_replace). Hier ist der Teil des Codes oder wollen die doppelten Anführungszeichen von „VALUE“ zu entkommen:
static void
_display_track_gdo(
gnsdk_gdo_handle_t track_gdo
)
{
gnsdk_error_t error = GNSDK_SUCCESS;
gnsdk_gdo_handle_t title_gdo = GNSDK_NULL;
gnsdk_cstr_t value = GNSDK_NULL;
/* Track Title */
error = gnsdk_manager_gdo_child_get(track_gdo, GNSDK_GDO_CHILD_TITLE_OFFICIAL, 1, &title_gdo);
if (GNSDK_SUCCESS == error)
{
error = gnsdk_manager_gdo_value_get(title_gdo, GNSDK_GDO_VALUE_DISPLAY, 1, &value);
if (GNSDK_SUCCESS == error)
{
char s[1024] = value;
str_replace(s, "\"", "\\\"");
printf("\"%s\": \"%s\"", "track", s);
}
else
{
_display_last_error(__LINE__);
}
gnsdk_manager_gdo_release(title_gdo);
}
else
{
_display_last_error(__LINE__);
}
}
Während der Kompilierung der Fehler ist:
main.c: In function '_display_track_gdo':
main.c:756:4: error: invalid initializer
char s[1024] = value;
Wie kann ich mein Problem zu lösen? Oder verwenden Sie eine andere Methode, um die doppelten Anführungszeichen zu umgehen?
Vielen Dank im Voraus.
Herzlich.
PS: Ich weiß nicht viel die Sprache C, also ist es möglich, dass ich Fehler beim Code machen.
Gültig Punkt! Aber das ist mehr ein Kommentar als eine Antwort. – sjsam
Anscheinend funktioniert es gut, aber ich weiß noch nicht, ob meine Charaktere entkommen sind, weil ich andere Sorgen habe. Ich habe dies: char s [1024]; strcmp (s, Wert); \t \t \t str_replace (s, "\" "," \\\ ""); printf ("\"% s \ ": \"% s \ ",", "album", s); Nun werden meine Informationen in der Konsole mit Sonderzeichen angezeigt: {"retour": [{"artist": " i", "album": " i", "track": ""}] , "line": {"pos": "0"}} –
@Vincentleveque sorry Ich habe fälschlicherweise 'strcmp' eingegeben, es sollte' strcpy' sein, weil wir Werte in das char-Array 's' kopieren. Wechseln Sie zu 'strcpy (s, value)' und versuchen Sie es erneut. – fluter