gpt4 book ai didi

c - C 函数返回 gchar 的问题**

转载 作者:行者123 更新时间:2023-11-30 14:31:14 25 4
gpt4 key购买 nike

我有一个定义如下的函数(用 C 语言):

gchar **Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag, gchar code)
{
switch (code)
{
case 't': /* Title */
return &FileTag->title;
case 'a': /* Artist */
return &FileTag->artist;
case 'b': /* Album */
return &FileTag->album;
case 'd': /* Disc Number */
return &FileTag->disc_number;
case 'y': /* Year */
return &FileTag->year;
case 'n': /* Track */
return &FileTag->track;
case 'l': /* Track Total */
return &FileTag->track_total;
case 'g': /* Genre */
return &FileTag->genre;
case 'c': /* Comment */
return &FileTag->comment;
case 'p': /* Composer */
return &FileTag->composer;
case 'o': /* Orig. Artist */
return &FileTag->orig_artist;
case 'r': /* Copyright */
return &FileTag->copyright;
case 'u': /* URL */
return &FileTag->url;
case 'e': /* Encoded by */
return &FileTag->encoded_by;
case 'i': /* Ignored */
return NULL;
default:
Log_Print(LOG_ERROR,"Scanner: Invalid code '%%%c' found!",code);
return NULL;
}
}

我正在尝试向 switch 语句添加新条件,例如

case 'f':

其中它将返回 &FileTag->artist 的第一个字符。

我已经搜索了所有互联网来寻找解决方案,但却空手而归。大家有什么想法吗?

更新:如果有帮助,此功能是应用程序 EasyTag 的一部分。从我通过代码看到的情况来看,这是确定 easytag 文件排序功能的新文件名的地方。我正在尝试添加一个新变量以允许应用程序将音乐分类到目录中,如下所示:<First letter of artist name>/<Artist>/<Album>/<Tracks>

我总是有可能看到错误的函数,但据我所知,确实如此。

另一个更新:我让这个函数按照我想要的方式工作(指针是有趣的小东西),但正如下面指出的,它并没有达到我的预期。感谢大家的帮助和耐心!

最佳答案

我不太清楚为什么你的代码返回一个指向指针的指针,但这使你想要的操作稍微困难一些。由于您需要返回指针的地址,而不仅仅是指针本身,因此您必须在某处分配该新指针(然后谁来释放它?)。如果您不介意内存泄漏,则可以忽略该问题,只需分配一个指针并返回其地址。或者,您可以创建 File_Tag 的新成员,其中包含一个短字符串,其中包含 artist 的第一个字符。

glib string functions对此会有帮助,快速浏览列表显示 g_strdup_printf()可能有用:

gchar *first = g_strdup_printf("%c", FileTag->artist[0]);

然后分配一个地方来存储first并返回它的地址。

更新:使用 http://codesearch.google.com我好像有found where this function you're changing is used ,看起来返回值用于更改返回的字段。

    // Get the target entry for this code
dest = Scan_Return_File_Tag_Field_From_Mask_Code(FileTag,mask_item->code);

// We display the text affected to the code
if ( dest && ( OVERWRITE_TAG_FIELD || *dest==NULL || strlen(*dest)==0 ) )
ET_Set_Field_File_Tag_Item(dest,mask_item->string);

如果您的代码返回一个包含艺术家姓名第一个字符的新字符串,我不确定您究竟想要做什么。上面的代码将更改新分配的字符串指向,这对实际的艺术家姓名没有影响。

关于c - C 函数返回 gchar 的问题**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1805134/

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