2016-08-31 2 views
1

В принципе, я хочу ввести строку текста и, если она совпадает со строкой в ​​структуре (* cmd_name), программа затем вызовет и выполнит соответствующую ей функцию , Вот моя попытка:Массив структур и использование переменных указателя на функции

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void new_cmd() 
{ 
    printf("You entered new_cmd function!"); 
} 
void close_cmd() 
{ 
    printf("You entered close_cmd function!"); 
} 
void open_cmd() 
{ 
    printf("You entered open_cmd function!"); 
} 
void close_all_cmd() 
{ 
    printf("You entered the close_all_cmd function!"); 
} 

struct{ 
    char *cmd_name; 
    void (*cmd_pointer)(void);    //variable of a pointer to a function 
    }file_cmd[]= { {"new",  new_cmd}, 
        {"open", open_cmd}, 
        {"close", close_cmd}, 
        {"close all", close_all_cmd}}; 


int main() 
{ 
    int i; 
    char my_string[15]; 

    scanf("%s",my_string); 
    for(i=0; i<4;i++) 
     if(file_cmd[i].cmd_name == my_string)  //matching the string 
     { 
      file_cmd[i].cmd_pointer();   //possible mistake here, trying to open the function 
      break; 
     } 

    return 0; 
} 

Всякий раз, когда я проверить это и написать в командной строке «новый» или любой строке, программа не выполняется на все и выходах.

+0

'==' не может сравнивать строки, только адреса. Используйте 'strcmp'. Много похожего вопроса на SO, поиск в первую очередь. –

+1

Возможный дубликат [Как правильно сравнить строки в C?] (Http://stackoverflow.com/questions/8004237/how-do-i-properly-compare-strings-in-c) –

ответ

2

Вы не можете сравнить строки, используя ==, вы должны использовать strcmp().

Следует отметить, что scanf("%s",my_string); должно быть лучше scanf("%14s",my_string);, чтобы избежать избыточного буфера на более длинный, чем ожидалось, вход. Кроме того, вы должны всегда проверять возвращаемое значение scanf() для обеспечения успеха.

+0

Я чувствую себя немым. Большое спасибо, сейчас он работает. – tadm123

Смежные вопросы