2015-05-25 26 views
0

我是Linux新手。我想问一下如何在字符数组中存储命令行参数。我在一小时内使用以下代码,但无法解决此问题(分段故障Core Dumped)。 下面是代码将命令行参数存储在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) 
+0

为什么标记为“java”? – agad

回答

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);