将命令行参数存储在Linux上的字符数组中

时间:2015-05-25 07:20:44

标签: c linux arguments

我是Linux新手。我想问一下如何在字符数组中存储命令行参数。我从一小时后使用以下代码,但我无法解决此问题(分段故障核心转储)。 这是代码

int main(int argc, char **argv[]) {
    char * MyIp[15];
    int j = 0;
    while(argv[1][j] != '\0') {
        MyIp[j] = argv[1][j++];
    }
    printf("IP : %s\n", *MyIp);
    return 0;
}

和命令行参数

./code.o "127.0.0.1"
Segmentation fault(core dumped)

1 个答案:

答案 0 :(得分:1)

您显示的小代码存在许多问题。首先,您将MyIp声明为指向char的指针数组,即字符串数组。您从argv[1][j++]分配了单个字符,并在打印时将*MyIp打印为字符串(声明为),但问题在于您打印的指针(MyIp[0])由一个字符初始化,它不是一个非常有效的指针。

您似乎想要的是复制单个字符串argv[1],在这种情况下,有多个更简单的方法,例如strncpy用于复制特定长度的字符串:

char MyIp[15];
if (argc > 1)
{
    strncpy(MyIp¸ argv[1], 14);
    MyIp[14] = '\0';  // If `argv[1]` is too long, terminate manually
}
else
    strcpy(MyIp, "Unknown");

printf("IP : %s\n", MyIp);