我想截掉 *argv[] 的前两个字符并将它们存储在数组中。
int main (int argc, char *argv[])
{
char salt[2] = {argv[1][0], argv[1][1]};
printf("%s\n",salt);
}
编译后,当我通过输入 ./program_name asdf 在终端运行该程序时,我期望“asdf”作为 *argv[] 传入。所以我期望程序会打印出“as”。然而,实际发生的情况是,它将打印出“as”,后跟相同的随机字符。这是最近几次出现的结果:
Ember 。
asX
问
as8\8
最佳答案
字符串本质上是 C 语言中以 null 结尾的字符序列。在数组中只有两个非空字符,因此当您尝试将其打印为字符串时,其结尾是不确定的。这会导致未定义的行为。
如果要从字符数组构造字符串,请将数组的大小扩展一并在末尾添加空字符:
char salt[3] = {argv[1][0], argv[1][1], '\0'};
// ^ Extend ~~~~ Terminate
关于c - 将数组打印为字符串在末尾返回奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461952/