2013-04-18 3 views
2
char *commandstrings[MAXARGS]; 

    commandstr = strtok(line,"|"); 
    int i = 0; 

    while(commandstr != NULL){ 
     commandstrings[i] = commandstr; 
     printf("%s \n",commandstr); 
     commandstr = strtok(NULL,"|"); 
     i++; 
    } 

    printf("first parsing complete!"); 

Привет, ребята. Я пытаюсь разделить строку на различные подстроки с помощью strtok и хранить их в массиве строк, называемых «commandstrings».ошибка сегментации в этом маленьком фрагменте кода?

проблема заключается в том, что я получаю ошибку сегментации непосредственно перед достижением окончательного printf. должен я дать в качестве аргумента строку: "лол | OMG | BBQ"

программа печатает:
лол
OMG
BBQ
ошибки сегментации (ядро сбрасывали)

Что может быть проблема ? Я не думаю, что мне нужно подвергать вас, ребята, остальной частью кода, так как цикл «while» выполняется красиво, и ошибка возникает непосредственно перед тем, как покинуть cicle, поскольку последняя печать не отображается.

Спасибо!

+1

Может быть, я слишком устал, но ошибка не является очевидным для меня на первый взгляд (кажется совсем по-одной ошибки, хотя). +1 для размещения соответствующей части кода после применения вычетов на основе логики. Редкая птица на SO в наши дни. – 2013-04-18 22:32:29

+0

@Valiant Пожалуйста, опубликуйте полную программу. Вы уверены, что это сбой перед отпечатком отпечатка printf? – Mahesh

+2

Как сказал бы Шерлок Холмс, если вы уничтожили весь код, и ваша программа все равно выйдет из строя, ваша ошибка будет в другом замке. Что такое 'line'? –

ответ

5

Следующие работы для меня. Также доступен на http://codepad.org/FZmK4usU

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

int main() { 

    char line[] = "lol | omg | bbq"; 
    enum{ MAXARGS = 10 }; 
    char const *commandstrings[MAXARGS]; 

    int i = 0; 
    char * commandstr = strtok(line,"|"); 

    while(commandstr != NULL){ 
     commandstrings[i] = commandstr; 
     printf("%s \n",commandstrings[ i ]); 
     i++; 
     commandstr = strtok(NULL,"|"); 
    } 

    printf("first parsing complete!"); 
} 
+1

Хорошо заметили, я ломал голову над попыткой ее с помощью символа 'char * line = ...' – Kninnug

+1

@ArunSaha - не знал о кодепаде - аккуратно! – Tom

+0

Благодарим вас за очищение моего кода. Проблема была в другой функции, которую я назвал после окончательного printf. Мне трудно понять, почему окончательная печать не показывала, была ли проблема сегментации после нее. В любом случае, большое спасибо! –