我是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 :(得分: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);