【发布时间】:2013-07-27 05:23:47
【问题描述】:
我想从 snd_mixer_selem_get_id 函数返回 char 数组:
char* alsa_get_channel_name( void )
{
int err;
snd_mixer_selem_id_t *sid;
snd_mixer_elem_t *elem;
if ((err = snd_mixer_open (&handle, 0)) < 0) {
fprintf(stderr, "mixer: open error: %s\n", snd_strerror(err));
}
if ((err = snd_mixer_attach (handle, card)) < 0) {
fprintf(stderr, "mixer: attach error: %s\n", snd_strerror(err));
}
if ((err = snd_mixer_selem_register (handle, NULL, NULL)) < 0) {
fprintf(stderr, "mixer: register error: %s\n", snd_strerror(err));
}
if ((err = snd_mixer_load (handle)) < 0) {
fprintf(stderr, "mixer: load error: %s\n", snd_strerror(err));
}
snd_mixer_selem_id_alloca(&sid);
for (elem = snd_mixer_first_elem(handle); elem; elem = snd_mixer_elem_next(elem)) {
if ((!snd_mixer_selem_is_active(elem))
continue;
snd_mixer_selem_get_id(elem, sid);
const char *name = snd_mixer_selem_id_get_name(sid);
if (name)
sprintf(name, sizeof(name), "%s", snd_mixer_selem_get_name(elem));
}
snd_mixer_close(handle);
return name;
}
我不知道怎么写 line sprintf(name, sizeof(name), "%s", snd_mixer_selem_get_name(elem));返回频道名称。
谢谢
【问题讨论】:
-
请注意,您正在返回指针的指针,函数的返回类型是什么(所以它是正确的)。但是您没有返回 char 数组的指针。我觉得你不会退还那个。
-
首先,您的
name是const char*,而不是char **,它们不是同义词。是否有某些原因您没有malloc()ing 结果缓冲区,将结果复制到其中并返回它? (即返回char *)。 -
return result;但是,您没有为此获得任何空间或在其中放置任何东西。你真的应该更好地格式化你的问题。