функция копирования подстроки в C приводит к seg - PullRequest
1 голос
/ 03 ноября 2019

Моя функция subStr копирует "часть" части строки (src) в другую (out). Несмотря на то, что все выглядит нормально, при использовании функции я получаю ошибку сегментации ... Кто-нибудь может помочь? Я пытался использовать valgrind для решения этой проблемы, но он не достаточно конкретен, чтобы найти решение.

код вставлен по ссылке, предоставленной в комментарии

void subStr(char *src, char *out, int part) {           /*    subStr is a function that copies the "part"
                                                              substring of src to out and returns out's
                                                            address -- "parts" are strings seperated by spaces  */
    int i = 0, j = 0;

    while(part > 1) {

        while(*(src + i++) != ' ') {}                   // cycle through bytes of src

        part--;                                         // decrease "part" by one for every space found

    }                                                   // here we have reached the string we want to copy

    while((*(src + i) != ' ') || (*(src + i) != '\0'))  // copy till next space or end of string
        *(out + j++) = *(src + i++);

    *(out + j) = '\0';

}

Ответы [ 3 ]

0 голосов
/ 03 ноября 2019
void subStr(char *src, char *out, int part) {
    int i = 0, j = 0;
    while(part > 1) {
        while(*(src + i++) != ' ' && *(src + i) != '\0' ) { }
        part--;
    }
    j = i;
    while((*(src + i) != ' ') && (*(src + i) != '\0'))
        *(out + j++) = *(src + i++);
    *(out + j) = '\0';
}
int main(int argc, const char** argv) {
    char s[] = "i like pie";
    char t[] = "i like cake";
    cout << s << endl << t << endl;
    subStr(s, t, 3);
    cout << s << endl << t << endl;
    return 0;
}

Я включил пункт, который пользователь12315953 поднял в своем ответе. вывод выглядит следующим образом: мне нравится пирог, я люблю пирог, я люблю пирог, я люблю пирог

0 голосов
/ 03 ноября 2019

Проблема решена .. Нужно просто && вместо ||

0 голосов
/ 03 ноября 2019

while (* (src + i ++)! = '') {} // циклически проходить байты src

// вам нужно проверить, нет ли у вас * src;либо (... && i

...