2017-02-09 16 views
0

Я пытаюсь научить себя языку C. До сих пор мой переход с C был грубым. Я делаю проблему из книги «Введение в язык C», и есть проблема, которая должна читать строку от пользователя, а затем запрашивать у пользователя значение int. Моя работа была найти это конкретное слово, соответствующее int.Ошибка шины с использованием массивов символов в c

Пример

Hello World, как вы все делаете. // Это линия читается

2 // слово будет выведено на консоль

Ожидаемое Выходной

Мир

Ниже приведен фрагмент кода моего кода, который, я думаю, дает мне ошибку шины.

void corrspndToInt (char *theLine, int word, char *result) { 

    int start; 
    int end; 
    int spaces = 1; 
    result = ""; 

    //int i; 

    //search for the nth non-blank character 

    for(start = 0; start < strlen(theLine) && (spaces < word); start++) { 

     if(isspace (theLine[ start ])) { 

      spaces++; 
     } // end if 

    } // end for loop 

    //only need to continue if we haven't gone past the end of the string 

    if(start < strlen(theLine)) { 

     //the next blank character is the end 

     for (end = start; end < strlen(theLine) && (!isspace (theLine[ end ])) ; end++) { 

     ; 

     } // end for loop 

     //we now have the word 

     result = strncpy (result, theLine+start, end - start); 

    } // end if 

} 

Это, как я печать результат в main функции.

printf("%s\n", result); 

Теперь, когда я преподавал язык C себе и через SO, я узнал, что возвратные массивы char не должны быть выполнены. Было два метода динамического распределения с использованием функции malloc, и был еще один метод, который я реализовал в своем коде. Я проверил свой другой метод, и, похоже, в этом нет ничего плохого. Проблема здесь заключается в этом методе, поскольку он не получает правильного слова.

Я пытался отладить мою программу, но, по-видимому, Mac не принимает команду gdb. Я установил инструменты командной строки и все остальное, но он все еще говорит

Команда не найдена

Может кто-нибудь, пожалуйста, руководство меня в правильном направлении здесь? Я переусердствовал эту проблему за последние 1 час.

+0

Было бы проще получить помощь, если вы разместите [mcve]. –

+1

'result =" ";': Я думаю, что это плохая идея. – BLUEPIXY

+0

Должен ли я использовать цикл for, чтобы вручную назначать каждому индексу пробел? Также может быть причиной ошибки шины. Я проверил свой другой метод, и он работает нормально. Проблема, похоже, в этом. @BLUEPIXY – Saad

ответ

0

Во-первых, вы должны выделить достаточно места для result держать слово, что означает

result = malloc (sizeof(char) * (length_of_the_word+1)); 

при условии, что вы обнаружили длину слова, которое вы хотите скопировать. Один дополнительный, потому что мы хотим добавить завершающий символ \0 в конце строки, когда вы используете strncpy

От функции неясно, что вы выделили место для результата или нет. Надеюсь, это поможет вам выполнить эту задачу.

+1

Я выделил место в моем «основном» методе. Я не хочу использовать функцию 'malloc', поэтому я реализовал вышеупомянутый способ возврата массива char. – Saad

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

  • Нет связанных вопросов^_^