c - 通过main传入并设置global int

标签 c variables global program-entry-point

我一直在尝试通过动态传递要添加到堆栈的项目数量来为我的 Stack ADT 创建一个测试器。但是,当我尝试传递一个整数(例如 22)时,它会将全局变量 (ITEMS) 指定为 50。如果我尝试其他值,则范围在 45 到 55 之间。

我的主要功能是这样的:

int main(int numArgs, char* numItems[]) {
    Stack stack;

    if (numArgs == 0) {
        printf("Good job, you broke C.\n");
    } else if (numArgs == 2) {
        int items = (int)*numItems[1];
        if(*numItems[1] != ITEMS) {
            setItems(items);
        } 
    } else if (numArgs>=3) {
        printf("Usage: TestStack <numItems> <-help>\n");
        exit(1);
    } else if(numItems[1] == "-h" || numItems[2] == "-help") {
        printf("numItems   - Number of items to add to the stack.\n            -h     (-help) -  Shows this help output.\n");
        exit(1);
    }
    /* test code here*/
}

赋值函数为:

static void setItems(int numItems) {
    ITEMS = numItems;
    printf("ITEMS IS %d\n",ITEMS);
}

我的全局变量就是

int ITEMS = 11; //Default value.

有什么原因导致我实际上无法获得我试图传递的真实值(value)?

最佳答案

你的问题在这里:

int items = (int)*numItems[1];

这将读取您传入的第一个 charint 值...由于您传入 22,它将得到2 的 ASCII 值是 50。Refer to this chart (感谢 asciitable.com)12 月 50 日:

ASCII table

您要做的是使用 atoi 将整个 cstring 解释为整数:

int items = atoi(numItems[1]);

strtol:

int items = strtol(numItems[1], NULL, 10);

关于c - 通过main传入并设置global int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14652279/

相关文章:

c - 为什么 while(true) 是无限循环?

c - 存储一个 Lua 函数?

改变 const 指针的值

c - 通用 MPLAB X、XC8 和 C。跨函数和源文件使用变量

javascript - Jquery - 如何将变量传递到函数中以供使用?

java - 如何在 Java 中创建全局可用的库?

C - 未知类型名称(全局结构)

c - 动态库中的全局变量

c - openSSL 示例中的 SSL 接受错误

java - 在 shell 脚本中使用 JAVA 多行输出作为变量