gpt4 book ai didi

c - 在 Gracenote GNSDK 脚本中转义双引号

转载 作者:行者123 更新时间:2023-11-30 15:09:18 24 4
gpt4 key购买 nike

我使用带有 SDK Gracenote (GNSDK) 的脚本来对文件(指纹)进行音频识别。

脚本工作正常,我只是想转义变量中的双引号。

我发现了这个功能:

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);
}

我想在这里使用,我的印象是变量类型不同,但我不知道如何(开头为gnsdk_cstr_t,函数str_replace中为char)。这是代码的一部分或想要转义“VALUE”的双引号:

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__);
}

}

编译时出现错误:

main.c: In function '_display_track_gdo':
main.c:756:4: error: invalid initializer
char s[1024] = value;

我该如何解决我的问题?或者使用另一种方法来转义双引号?

提前谢谢您。

诚挚的。

PS:我对C语言不太了解,所以我可能在如何编码时犯错误。

最佳答案

value 的类型为 gnsdk_cstr_t,您不能使用它来初始化 char 数组。使用库提供的 API,您可能可以将其复制或转换为 char 数组。但不能分配给数组。

查看库的源码,其实gnsdk_cstr_t定义为typedef const gnsdk_char_t* gnsdk_cstr_t;,而gnsdk_char_t定义为typedef char gnsdk_char_t;,这意味着,gnsdk_cstr_t与空终止字符串相同,可以直接调用标准字符串函数:

char s[1024];
strcpy(s, value);

引用:

https://github.com/tingled/jambox/blob/master/rpi_gnsdk/include/gnsdk/gnsdk_defines.h

关于c - 在 Gracenote GNSDK 脚本中转义双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36766845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com