将字符串从argv复制到C中的char数组

时间:2015-05-18 17:17:31

标签: c arrays linux copy

我有以下代码将参数字符串复制到char数组。

char *str = malloc(strlen(argv[1]) + 1);
strcpy(str, argv[1]);

printf("%s\n", str);

为什么我传递以下参数:

$6$4MfvmFOaDUaa5bfr$cvtrefr

我明白了:

MfvmFOaDUaa5bfr

而不是整个字符串。我失去了第一个号码。我尝试了各种方法,每个方法都相同或不起作用。

我的关键是只获得盐(在这种情况下)4MfvmFOaDUaa5bfr$6$4MfvmFOaDUaa5bfr 没有第三个$字符。我试着在遇到第三个$然后停止复制的同时获得复制字符串的方法。

1 个答案:

答案 0 :(得分:10)

因为在字符串$6$4MfvmFOaDUaa5bfr$cvtrefr中,$6$4$cvtrefr被shell扩展为位置参数和变量,并且它们都是空的。

用单引号传递参数:

./a.out '$6$4MfvmFOaDUaa5bfr$cvtrefr'

将阻止shell扩展。