2016-06-23 3 views
-5

Я считаю, что это из-за strcmp(). Я пробовал это несколько способов, и это только последнее. Моя цель - получить индекс массива, чтобы я мог перейти к оператору switch для выполнения кода. Любая помощь будет оценена, хотя я ожидаю «Ты не сможешь этого сделать».Почему возникает ошибка сегментации с помощью strcmp

Большое изображение, чтобы включить этот надрез кода в файл «полезности», который имеет несколько «функции» и назвал бы это как Util («Ping»), чтобы выполнить Ping и так далее ...

int main(){ 
char *cmd = "Ping"; 
char *names[3]={"Ping","Stop","Go"}; 

int index = 3; 
int i; 
char *test; 

for (i = 0; i < 44; i++) 
{ 
    test = names[i]; 
    if (!strcmp(cmd,test)) 
    { 
     index = i; 
    } 
} 
printf("%s is index of %d\n",cmd,index);} 
+6

Потому что вы зацикливаете на 44 элемента вместо 3? –

+0

Неправильно отредактируйте это, там будет 44 элемента в коммутаторе, но я опустил его на стол. – Kyle

+0

Действительно ли это segfault для 3? Я так не думаю. –

ответ

1

Зачем это делать 44 раз, я не понимаю. Но когда я изменил с 44 до 3 в цикле, он работает.

for (i = 0; i < 3; i++) 

Зависит от вашего компилятора, но в случае 44 итерационных окон приложение не отвечает.

+1

Он отредактировал вопрос, чтобы исправить это за несколько минут до того, как вы ответили. – Barmar

+0

Благодарим вас за комментарий. Я добавил 45 элементов в массив и запустил цикл 44 раза. Оно работает. Я использую компилятор Dev c/C++ в Windows 10. – denis

+0

@denis: было бы легче изменить '44' на' 3'. Во всяком случае, вопрос вне темы без дополнительной информации. – Olaf

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