如何使用命令行参数的子集调用另一个 C 文件中的函数?

How to call a function in another C file with a subset of the command-line arguments?

如何使用命令行调用此 convert 函数,并从参数 2 开始将字符串转换为 int 并存储在数组中?

#include <stdio.h>

int main (int argc , char* argv[])
{
    int i;
 
    if (argc < 2)

    {
        printf("Error: Less than two arguments\n");
    }
    else 
    {
        for(i=0; i<argc; i++)
        {
            printf("[%d] : %s\n", i , argv[i]); 
        }
    }
    return 0;
} 

同一目录中的函数,但在单独的 C 文件中:

void convert ( char* parray[] ,int array[] )
{   
    int i;
 
    printf("The converted array = ");

    for (i=0; i< LENGTH; i++)
    {
        array[i] = atoi(parray[i]);

        printf(" %d" , array[i]);
    }
    printf("\n");
}

您可以将两个文件编译成同一个可执行文件,例如:

gcc -o main main.c convert.c

要在 main.c 中使用 convert.c 中的函数,您必须在定义 main() 函数之前声明该函数,如下所示:

#include<stdio.h>

void convert ( char* parray[] ,int array[] );

int main (int argc , char* argv[])
{
    // your code ..

    //you may now use the convert function inside the main function
    convert(param1, param2);
}

或者,您可以为 convert.c 创建一个名为 convert.h 的头文件,如下所示:

#ifndef CONVERT_H
#define CONVERT_H

void convert ( char* parray[] ,int array[] );

#endif

然后,您可以像这样在主文件中包含头文件:

#include<stdio.h>
#include "convert.h"

int main (int argc , char* argv[])
{
    // use convert here somewhere
    convert(param1, param2);
}

创建一个模块,在单独的文件中声明,在单独的文件中实现。

functions.h:

#ifndef FUNCTIONS_H /* include guard */
#define FUNCTIONS_H

void convert(char *parray[], int array[], int length);

#endif

functions.c:

#include "functions.h" /* include your header with the declarations */
#include <stdio.h>
#include <stdlib.h>

void convert(char *parray[], int array[], int length)
{

    int i;

    printf("The converted array = ");

    for (i = 0; i < length; i++)
    {
        array[i] = atoi(parray[i]);

        printf(" %d", array[i]);
    }
    printf("\n");

    return;
}

main.c:

#include "functions.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int i, *arr = NULL;

    if (argc < 2)
    {
        printf("Error: Less than two arguments\n");
    }
    else
    {
        arr = malloc((argc - 1) * sizeof(int)); /* array can be static too */

        if (arr == NULL)
        {
            exit(EXIT_FAILURE);
            /* handle error */
        }

        convert(&argv[1], arr, argc - 1);

        free(arr); /* free when you exit */
    }

    return 0;
}

编译:

clang -c functions.c && clang main.c functions.o

clang functions.c main.c

输出:

$ ./a.out 15 20 -90 18 20 20 8 8 8 81
$ The converted array =  15 20 -90 18 20 20 8 8 8 81