C语言中的递归打印函数

C语言中的递归打印函数,c,recursion,C,Recursion,程序当前没有输出任何内容。该程序旨在获取一个整数命令行值,然后使用递归打印函数打印测试该次数。我是C语言的新手,不明白为什么程序不能工作,我没有得到任何编译错误。仍在努力熟悉gdb #include <stdio.h> void myfunc(int num) { if(num <= 0) { return; } else { printf("%s \n", "Test"); myfunc

程序当前没有输出任何内容。该程序旨在获取一个整数命令行值,然后使用递归打印函数打印测试该次数。我是C语言的新手,不明白为什么程序不能工作,我没有得到任何编译错误。仍在努力熟悉gdb

#include <stdio.h>

void myfunc(int num)
{
    if(num <= 0)
    {
        return;
    }
    else
    {
        printf("%s \n", "Test");
        myfunc(num-1);
        return;
    }
}

int main (int argc, char *argv[])
{
    int i;
    i = atoi(argv[0]);
    myfunc(i);
}

因为您没有传递int:

i = atoi(argv[0]);
              ^
             argument 0 is name of executable 
可能是您的需要:

i = atoi(argv[1]);

因为您没有传递int:

i = atoi(argv[0]);
              ^
             argument 0 is name of executable 
可能是您的需要:

i = atoi(argv[1]);
argv[0]保存可执行文件的名称,因此在运行可执行文件时:

program.out 1 2

argv[0] will be "program.out", (they are all strings)
argv[1] will be "1",
and argv[2] will be "2".
为了完整起见,argc将保存argv中的元素数,因此在本例中,argc将是3整数3,而不是string3。

argv[0]保存可执行文件的名称,因此在运行可执行文件时:

program.out 1 2

argv[0] will be "program.out", (they are all strings)
argv[1] will be "1",
and argv[2] will be "2".

为了完整起见,argc将保存argv中的元素数,因此在本例中,argc将是3整数3,而不是string3。

我知道它会是这样简单的。谢谢你,atoi真的有UB吗?除了在溢出时返回一个未定义的值之外?@代码您知道吗:将其用于更健壮的代码。-否则这里是一个未定义的行为–@Medinoc,因为代码没有传递数字字符串。@GrijeshChauhan IIRC atoi在它接收的字符串不是数字时可靠地返回零,这里没有未定义的行为。我知道这会很简单。谢谢你,atoi真的有UB吗?除了在溢出时返回一个未定义的值之外?@代码您知道吗:将其用于更健壮的代码。-否则这里是未定义的行为–@Medinoc,因为代码没有传递数字字符串。@GrijeshChauhan IIRC atoi在它接收的字符串不是数字时可靠地返回零,这里没有未定义的行为。@Code和argv[argc]在zubergu的示例argv[3]中=NULL,因为argc是3。@Code和argv[argc]在zubergu的示例argv[3]中=NULL,因为argc为3。