Постфиксное выражение с аргументом командной строки, ошибка сегментации? С
Итак, у меня есть программа, которая должна принимать выражение в качестве аргумента командной строки без пробелов, например:
./программа 22+
./программа 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 ответ
int main(int argc, char **argv[]){
Это неверно. Либо использовать char **argv
или же char *argv[]
, но нет char **argv[]
, Как только вы это исправите, исправьте ваш цикл, чтобы использовать правильный уровень косвенности (т.е. ожидать argv[i][j]
быть char
не char*
).