【问题标题】:Postfix Expression with command line argument, segmentation fault? C带有命令行参数的后缀表达式,分段错误? C
【发布时间】:2019-03-19 07:59:07
【问题描述】:

所以我有一个程序应该将表达式作为没有空格的命令行参数,例如:

./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;
}

已编辑:忘记包含我的功能

【问题讨论】:

  • 你知道,你不知道* 是一个shell 元字符吗?如果您希望程序将其作为自身接收,则需要在命令行中引用它。例如,./program 23+72-\*./program '23+72-*'

标签: c string stack command-line-arguments


【解决方案1】:
int main(int argc, char **argv[]){

错了。使用char **argvchar *argv[],但不能使用char **argv[]。修复该问题后,请修复循环以使用正确的间接级别(即,期望 argv[i][j]char,而不是 char*)。

【讨论】:

  • 我有点卡在这里但是,你如何修复循环以使用正确的间接级别?
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2020-09-16
相关资源
最近更新 更多