c - 如何返回字符数组?

标签 c alsa

我想从 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;
}

我不知道如何编写行 sprintf(name, sizeof(name), "%s", snd_mixer_selem_get_name(elem));返回 channel 名称。

谢谢

最佳答案

您对 sprintf() 的调用指定错误。检查man sprintfsprintf()函数将指针作为第一个参数,第二个参数应该是格式说明符。也许您的意思是使用 snprintf()

  • name 是一个 const char *,这意味着它是一个指向 const char 的指针,因此不允许您对其进行写入。
  • name 是一个 const char *,这意味着它是一个指针sizeof(name) 将计算为指向 char 的指针的大小,而不是您似乎假设的 strlen(name) + 1
  • name 是从 snd_mister_selem_id_get_name() 返回的指针。你甚至可以写进去吗?您似乎试图用“混合器简单元素标识符的名称部分”覆盖“混合器简单元素标识符”(然后返回它)。但是,一开始你的问题是“我想从 snd_mixer_selem_get_id 函数返回 char 数组”。

返回“来自 snd_mixer_selem_get_id 函数的字符数组”的最简单方法是只执行 return snd_mixer_selem_get_name(elem) 而不是尝试 sprintf() 将其转换为某些内容。 .. 如果确实需要返回字符串的副本,您可以returnstrdup(snd_mixer_selem_get_name(elem)),并记住调用者将负责调用返回值上的 free()`。

但是,由于您的问题相当不清楚(并且 ALSA 文档几乎和您的问题一样不清楚),我建议您重写您的问题,准确解释您的最终目标是什么,然后重试。

关于c - 如何返回字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888139/

相关文章:

c - 如何在 C 语言中的 shell 中追加到文件末尾?

c - printf %n 如何计算字符数?

Android AudioRecord - 不会第二次初始化

python - 语音识别无法正常工作(未检测到麦克风)

C HTTP 流媒体服务器流式传输音频分贝级别

Python alsaaudio 捕捉声音

linux - aplay 无法从配置 .asoundrc 中读取

c - GLUT键盘功能怎么写?

c - ns_initparse 的链接器错误

c - 无法理解 void (*fptr)(void) 指针在 void 数组中的使用