2013-09-15 2 views
0

переключателя с кодом У меня есть ниже:Сегментации ошибка неисправности с с простой констатацией

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


int main() { 

    int MAX_INPUT_SIZE = 200; 
    volatile int running = 1; 
    while(running) { 

char input[MAX_INPUT_SIZE]; 
char *tokens[100]; 
const char* cmds[] = {"wait", "pwd", "cd", "exit"}; 
char *cmdargs[100]; 

printf("shell> "); 
fgets(input, MAX_INPUT_SIZE, stdin); 

//tokenize input string, put each token into an array 
char *space; 
space = strtok(input, " "); 
tokens[0] = space; 

int i = 1; 
while (space != NULL) { 
    space = strtok(NULL, " "); 
    tokens[i] = space; 
    ++i; 
} 

//copy tokens after first one into string 
strcpy((char*)cmdargs, ("%s ",tokens[1])); 
for (i = 2; tokens[i] != NULL; i++) { 
    strcat((char*)cmdargs, " "); 
    strcat((char*)cmdargs, tokens[i]); 
} 


//compare tokens[0] to list of internal commands 
int isInternal = -1; 
for (i = 0; i < 4; i++) { 
    if (strcmp(tokens[0], cmds[i]) == 0) { 
isInternal = i; 
    } 
} 

char *wd[200]; 
switch(isInternal) { 
case 0: 
    //wait 
    printf("WAIT \n"); 
    break; 
case 1: 
    //pwd 
    printf("PWD \n"); 
    break; 
case 2: 
    //cd 
    printf("CD \n"); 
    break; 
case 3: 
    //exit 
    printf("EXIT" \n"); 
    break; 
case -1: 
    //not internal command, continue 
    break; 
} 


/* 
for (i = 0; tokens[i] != NULL; i++) { 
    printf("%s ", tokens[i]); 
} 
printf("\n"); 
*/ 
    } 
} 

НКУ дает мне ошибку, которая говорит segmentation fault (core dumped) всякий раз, когда я вхожу вход на все, и я не понимаю, что происходит , Есть идеи?

Я довольно уверен, что это как-то связано с оператором switch, но я не уверен, где проблема, так как все коммутаторы распечатывают строку отладки.

Примечание: Я получаю ошибку segmentation fault (core dumped) с входами: wait, pwd, cd, exit.

+5

'зЬгсру ((символ *) cmdargs, ("% S", маркеры [1]));' не делать то, что вы думаете, что делает , NB - Я не знаю, что вы думаете. –

+2

Что происходит со всеми приведениями? –

+0

@CarlNorum: см. Http://stackoverflow.com/questions/18809734/s-string-not-printing-space-after-string для предполагаемого эффекта. flexcalibur6, по крайней мере, пройти весь свой код, когда вам будет предоставлена ​​помощь в том, как его исправить. – Mat

ответ

1

Скомпилируйте его с помощью тега -g. Затем, как только вы скомпилируете его, сделайте «gdb a.out».

Тип "run".

Затем «где».

Он расскажет вам, в какой строке находится ваша ошибка seg.

Если вам нужна дополнительная помощь поиска GDB в Google :)

+0

Хм ... Так что это происходит всякий раз, когда я вводю ввод, это всего лишь одно слово. Если я вхожу в 'cd/home', тогда у него нет проблем и работает нормально. Поэтому моя ошибка заключается в том, что токены являются NULL после токенов [0]. – flexcalibur6

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