Saya memiliki struct yang berisi string dan pointer fungsi, dan saya mencoba mencari fungsi tertentu berdasarkan string yang diberikan untuk dieksekusi. Saya gagal mengkompilasi, karena saya mendapatkan kesalahan penugasan. Saya merasa sangat digoreng karena menatap ini sepanjang hari, jadi itu bisa dengan mudah menjadi sesuatu yang sederhana. Saya telah mencoba beberapa cara berbeda untuk memformat struct tetapi saya mendapatkan varian pada kesalahan penugasan, tetapi saya dapat mempersempitnya menjadi hanya panggilan balik.

typedef struct builtin
{
        char *str;
        int (*func)(void);
} built_t;

/**
 * exec_builtin - matches input to function and runs function
 * @argv: null terminated string of args for program
 * Return: 1 on success, 0 on exit, -1 on failure
 */

int exec_builtin(char **commands)
{
        built_t built_ins[] = {
                {"exit", &func_exit},
                {NULL, NULL}
        };

        int i = 0, function;

        for (i = 0; built_ins[i].str != NULL; i++)
                if (strcmp(built_ins[i].str, commands[0]) == 0)
                {
                        function = *(built_ins + i)->func;
                        return (function);
                }
        return (-1);
}
0
Maxwell Lovell 19 November 2020, 21:42

1 menjawab

Jawaban Terbaik
  • Dalam inisialisasi Anda, jangan gunakan alamat operator, hanya pengidentifikasi fungsi (bukan &func_exit, cukup func_exit).

  • jika Anda mendereferensikan pointer, gunakan '.' operator, jika Anda menggunakan pointer gunakan operator '->', yang mengatakan, baik *(built_ins + i).func atau (built_ins + i)->func atau dalam hal ini built_ins[i].func

  • field func adalah penunjuk fungsi, jika Anda ingin memanggil fungsi itu, Anda harus memperlakukannya sebagai fungsi: built_ins[i].func()

Mengapa Anda meneruskan array string ke fungsi Anda, tetapi hanya menggunakan entri pertama?

0
Erdal Küçük 19 November 2020, 19:16