Постфиксное выражение с аргументом командной строки, ошибка сегментации?С - PullRequest
0 голосов
/ 15 октября 2018

Итак, у меня есть программа, которая должна принимать выражение в качестве аргумента командной строки без пробелов, например:

. / Program 22+

. / Program 23 + 72- *

22 + также 2 + 2 и 23 + 72- это (2 + 3) * (7-2).Моя проблема в том, что я получаю ошибку сегментации.Может кто-нибудь, пожалуйста, помогите мне, почему я получаю эту ошибку?Заранее спасибо.

Мой код (пока у меня есть только дополнительная часть):

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

typedef struct stack{
    int top;
    int value[100];
}stack;

void push(stack *pushData, int num);
void initialStack(stack *data);
int pop(stack *popData);

int main(int argc, char **argv[]){
    int i, j;
    int a, b;
    int num = 0;
    stack data;

    initialStack(&data);
    for (i=1;i<argc;i++){
    j = 0;
    while(argv[i][j] != '\0'){
            if(strcmp(argv[i][j],"+") == 0){
                    a = pop(&data);
                    b = pop(&data);
                    num = a + b;
                    push(&data, num);
            }
            else {
                    push(&data, atoi(argv[i][j]));
            }
            j++;
    }

    //printf("%d\n", pop(&data));
    }

    printf("%d\n", pop(&data));

    return 0;
}


void initialStack(stack *data){
    data->top = 0;
}


void push(stack *pushData, int num){
    pushData->top++;
    pushData->value[pushData->top] = num;
}

int pop(stack *popData){
    int n;
    n = popData->value[popData->top];       
    popData->value[popData->top] = 0;
    (popData->top)--;
    return n;
}

Отредактировано: Забыл включить мои функции

1 Ответ

0 голосов
/ 15 октября 2018
int main(int argc, char **argv[]){

Это неправильно.Либо используйте char **argv или char *argv[], но не char **argv[].Как только вы это исправите, исправьте ваш цикл, чтобы использовать правильный уровень косвенности (то есть ожидайте, что argv[i][j] будет char, а не char*).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...