C - 从另一个c程序

时间:2017-06-19 03:00:36

标签: c pointers

我有两个c程序“main.c”和“ArgHandle.c”。

的main.c

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

main ( int argc, char * argv[] ){
    char * a[4];
    save_arg( argc, argv );

    a[0]=get_arg(); //warning: assignment makes pointer from integer without a cast
    if ( a[0] != NULL )
        printf("a[0]=%s\n", a[0] );
}

ArgHandle.c

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

static char * arg[5];

void save_arg( int argc, char * argv[] ){
    int i;
    for ( i=1; i<argc; i++ ){
        arg[i-1]=argv[i];
        printf("save_arg: arg[%d]=%s\n", (i-1), arg[i-1]);
    }
}

char * get_arg(){
    printf("get_arg: arg[0]=%s\n", arg[0] );
    return (arg[0]);
}

当我执行程序“./main -abc”时,它返回

save_arg: arg[0]=-abc
get_arg: arg[0]=-abc
Segmentation fault (core dumped)

从函数get_arg()返回后,它可以打印出ArgHandle.c中的char *参数,但不能打印在main.c中。

我是c编程的新手,不知道为什么会这样。然后我找到Iharob Al Asimi's post,并认为我应该使用malloc()为参数保留非本地内存。所以我修改了这样的代码:

main.c(修订版)

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

main ( int argc, char * argv[] ){
    char * a[4];
    save_arg( argc, argv );
    a[0]=malloc(50); // <~~~~ new added
    a[0]=get_arg(); //warning: assignment makes pointer from integer without a cast
    if ( a[0] != NULL )
        printf("a[0]=%s\n", a[0] );
    free(a[0]); // <~~~~ new added
}

ArgHandle.c(修订版)

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

static char * arg[5];

void save_arg( int argc, char * argv[] ){
    int i;
    for ( i=1; i<argc; i++ ){
        arg[i-1]=malloc(50); // <~~~~ new added
        arg[i-1]=argv[i];
        printf("save_arg: arg[%d]=%s\n", (i-1), arg[i-1]);
    }
}

char * get_arg(){
    printf("get_arg: arg[0]=%s\n", arg[0] );
    return (arg[0]);
}

但是,没有区别,Segmentation故障仍然存在。

解决

感谢chux,Retired Ninja和LưuVĩnhPhúc提出的建议。通过添加声明标题解决了问题。

0 个答案:

没有答案