c - 带命令行参数的后缀表达式,段错误? C

标签 c string stack command-line-arguments

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

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

已编辑:忘记包含我的函数

最佳答案

int main(int argc, char **argv[]){

这是错误的。使用 char **argvchar *argv[],但不要使用 char **argv[]。一旦你解决了这个问题,修复你的循环以使用正确的间接级别(即,期望 argv[i][j] 是一个 char,而不是 字符*).

关于c - 带命令行参数的后缀表达式,段错误? C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52807439/

相关文章:

winapi - 如何在 Win32 中找到进程的全局区域和堆栈区域?

c - 与一般内联相比,为什么 gnu_inline 属性对代码生成的影响如此之大?

Xcode 6 Swift 在文本字段中将字符串转换为 Int

c - 插入排序功能不起作用。为什么?

string - 在 C# 中检查两个字符串的相等性时, string.Equals() 或 == 哪个更好?

php - 使用 preg_replace 时我得到双字符...?

linux - 来自内核模块的调试堆栈

java - 使用堆栈 noAdajacentDuplicates

c - 编写一个名为combinations的C函数,它以n和r作为输入,并返回组合的数量

c - 模块化硬币找零程序逻辑【澳大利亚货币】