我有以下代码将参数字符串复制到char数组。
char *str = malloc(strlen(argv[1]) + 1);
strcpy(str, argv[1]);
printf("%s\n", str);
为什么我传递以下参数:
$6$4MfvmFOaDUaa5bfr$cvtrefr
我明白了:
MfvmFOaDUaa5bfr
而不是整个字符串。我失去了第一个号码。我尝试了各种方法,每个方法都相同或不起作用。
我的关键是只获得盐(在这种情况下)4MfvmFOaDUaa5bfr
或$6$4MfvmFOaDUaa5bfr
没有第三个$字符。我试着在遇到第三个$然后停止复制的同时获得复制字符串的方法。
答案 0 :(得分:10)
因为在字符串$6$4MfvmFOaDUaa5bfr$cvtrefr
中,$6
,$4
和$cvtrefr
被shell扩展为位置参数和变量,并且它们都是空的。
用单引号传递参数:
./a.out '$6$4MfvmFOaDUaa5bfr$cvtrefr'
将阻止shell扩展。