2015-05-18 195 views
7

我有以下代码将参数字符串复制到char数组。将字符串从argv复制到C中的char数组中

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

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

为什么当我通过以下参数:

$6$4MfvmFOaDUaa5bfr$cvtrefr 

我得到:

MfvmFOaDUaa5bfr 

整串代替。我失去了第一个号码。我尝试了各种各样的方法,每个人都工作相同或不工作。

我的钥匙只得到盐(在这种情况下)4MfvmFOaDUaa5bfr$6$4MfvmFOaDUaa5bfr 没有第三个$字符。我尝试在遇到第三个$时也尝试复制字符串的方法,然后停止复制。

回答

10

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

传递单引号的说法:

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

,这将防止shell扩展。

相关问题