c - 将数组打印为字符串在末尾返回奇怪的字符

标签 c arrays string

我想截掉 *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/

相关文章:

c - 按顺序合并(交错)两个排序的数组(但合并后不排序)

c - 初始化结构元素数组时出错

c - C 中的指针 : why is the * needed in *address_of_x = &x when getting the address of x?

java - 你能创建一个类实例数组吗?

java - 如何拆分字符串数组?

c++ - SSL_CTX_load_verify_locations 和可信证书

java - 数组列表的成本

java - 数组为新数组和非新数组

PHP:如何检查字符串的大写特定部分?

java - 如何在字符串中查找重复项?