C:通过指针访问第二个argv

时间:2017-02-09 17:20:50

标签: c pointers int argv dereference

因为我对C很陌生,所以我还没有得到关于指针的东西。我想检查命令行参数是否为整数,但是在一个单独的函数中,以便我传入argv数组的指针。

int main(int argc, char* argv[]){
    if(check(argv)){
        // Do stuff to argv[1]
    }
}

int check(char* p){
    // Test wether p+1 is int
    return 1;
}

我尝试了几件事,主要是导致奇怪的printf(当打印取消引用的指针来测试值时)。

int i = atoi(argv[1]);

当然,工作得很好。但由于指针是唯一传递给函数的东西,我瘫痪了。

3 个答案:

答案 0 :(得分:0)

int check(char* p){

当您传递char argv数组时,上述函数需要指向char *的指针 试试

int check(char* p[]){

在使用argv[1]之前,请检查argv[1]是否存在,即检查argc

int main(int argc, char* argv[]){
if(argc>1 && check(argv)){
    // Do stuff to argv[1]
}}

答案 1 :(得分:0)

在索引指针数组之前,我们必须确保它是有效的。我们必须使用argc来达到此目的。

strtol是一个解析字符串并检测错误的函数,如果它不是基本要求的话。

Ty this:

int main(int argc, char* argv[]){
    if(check(argc, argv)){
        // Do stuff to argv[1]
    }
}

int check( int argc, char * argv[] ){
    if( argc > 1 ) {
       char * err = NULL;
       strtol( argv[1], &err, 10 );
       return argv[1][0] != '\0' && *err != '\0';
    }
    return 0;
}

答案 2 :(得分:0)

Argv是一个二维数组,也就是说argv是一个数组数组。具体来说,argv是一个char数组的数组。现在,argv存储的数据是从命令行传递给程序的参数,其中argv [0]是程序的实际名称,其余是参数。

现在,要回答您的问题,您不需要将argv完整地传递给函数“check”。你需要做的是传递一个argvs元素。这是因为“check”的参数是char数组,而argv是char数组的数组。所以尝试传递argv [1]来检查第一个参数。

编辑:尝试此操作以检查除程序名称之外的所有参数

#include <stdio.h>
#include <ctype.h>

int main(int argc, char* argv[]) {
    for (int i = 1; i < argc; ++i) {
        if( check(argv[i]) ){
            // Do stuff to argv[i]
        }
}

int check(char* p){
    int i = 0;
    char c = p[i];
    while (c != '\0') {
        if (!isdigit(c))
            return 0;
        c = p[++i];
    }
    return 1;
}