首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有命令行参数的后缀表达式,分段错误?C

带有命令行参数的后缀表达式,分段错误?C
EN

Stack Overflow用户
提问于 2018-10-15 05:56:44
回答 1查看 185关注 0票数 0

因此,我有一个程序,它应该将表达式作为不带空格的命令行参数,例如:

./program 22+

./program 23+72-*

22+也是2+2和23+72- is (2+3)*(7-2)。我的问题是我得到了一个分割错误。有没有人能帮我解释一下为什么会出现这个错误?提前谢谢你。

我的代码(我现在只有添加部分):

代码语言:javascript
复制
#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;
}

编辑:忘记包含我的函数

EN

回答 1

Stack Overflow用户

发布于 2018-10-15 06:25:16

代码语言:javascript
复制
int main(int argc, char **argv[]){

这是错误的。可以使用char **argvchar *argv[],但不要使用char **argv[]。一旦你修复了它,修复你的循环以使用正确的间接地址级别(即,期望argv[i][j]是一个char,而不是char*)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52807439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档