Ошибка сегментации при попытке получить доступ к указателю внутри цикла - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь написать калькулятор командной строки, и я столкнулся с проблемой в функции, которую я написал, чтобы разбить строку на несколько меньших строк чисел и операторов.

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

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

#define MAXNUMLEN 100

void splitter(char *str, char splitted[][MAXNUMLEN]) {
    int next_op = 0;
    int last_op = 0;
    int next_free = 0;
    while(strlen(str) - last_op > 1) {
        for(next_op; 
               *(str+next_op) != '+' 
            && *(str+next_op) != '-' 
            && *(str+next_op) != '*' 
            && *(str+next_op) != '/';
            ++next_op)
            ;

        for(int i = last_op; i < next_op; ++i)
            splitted[next_free][i] = *(str+i);

        splitted[next_free][next_op] = '\0';
        ++next_free;
        last_op = next_op;
        ++next_op;
    }
}

int main() {
    char temp[] = "1+1";
    char c[4][MAXNUMLEN];
    splitter(temp, c);
    printf(c[0]);
    printf(c[1]);
    printf(c[2]);
    printf(c[3]);
}

Я сталкиваюсь с ошибкой сегментации в строке

splitted[next_free][i] = *(str+i);

Однако * (str + i) всегда должен быть доступен, так как i никогда не превышает длину строки.

1 Ответ

0 голосов
/ 22 июня 2019

next_op-for никогда не заканчивается, когда str не заканчивается оператором. Таким образом, i-цикл уходит в бесконечность и заканчивается в конце строки.

        ;
...