【发布时间】:2009-11-26 18:42:05
【问题描述】:
我有一个函数定义如下(在 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>
我总是有可能正在查看错误的函数,但据我所知,我是。
另一个更新: 我让这个函数按我的意愿工作(指针是有趣的小东西),但它并没有像下面指出的那样做我所期望的。感谢所有的帮助和耐心!
【问题讨论】:
-
你能解释一下 case 'f' 和 case 'a' 有什么不同吗?
-
大小写“a”返回整个艺术家姓名,新的“f”只返回第一个字母。 IE:Pink Floyd 的审判“a”将返回“Pink Floyd”“f”将返回“P”
-
该函数返回一个
gchar **。如果'Pink Floyd'和'P'都是gchar **类型,你应该没问题。 -
场景是我有一个字符串“/home/user/music/%f/
”。我有一个函数贯穿这个字符串,并以 \%[a-zA-Z] 的形式挑选出任何东西,并将字母与文件标记对象一起传递给这个函数。然后,此函数扩展该“标签”(% 字母)并将其返回以用于对文件进行排序。
标签: c pointers switch-statement glibc