在C语言中将字符串从argv复制到字符数组的方法

7
我有以下代码,将参数字符串复制到字符数组中。
char *str = malloc(strlen(argv[1]) + 1);
strcpy(str, argv[1]);

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

当我传递以下参数时,为什么会出现这种情况:
$6$4MfvmFOaDUaa5bfr$cvtrefr

我理解为:

MfvmFOaDUaa5bfr

我在某个地方丢失了第一个数字,而不是整个字符串。 我尝试了各种方法,每一种都表现得相同或者根本不起作用。

我的关键是仅获取盐(在此情况下为)4MfvmFOaDUaa5bfr$6$4MfvmFOaDUaa5bfr 没有第三个 $ 字符。 我也尝试获取复制字符串的方法,当我遇到第三个 $ 字符时停止复制。

1个回答

10

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

请使用单引号传递参数:

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

这将防止 shell 扩展。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接