Printf正在打印2个变量的内容

时间:2017-10-12 11:43:47

标签: c printf

当我偶然发现时,我正在通过在线课程进行练习,我删除了几乎所有内容的代码,但这仍然在发生,我的代码如下:

static const char alphabet1[] = "abcd";
void mycrack(char* hashed)
{
    char pass[4];
    char salt[2];
    for (int a = 0, size = sizeof(alphabet1); a < size - 1; ++a) {
        for (int b = 0, size = sizeof(alphabet1); b < size - 1; ++b) {
            for (int c = 0, size = sizeof(alphabet1); c < size - 1; ++c) {
                for (int d = 0, size = sizeof(alphabet1); d < size - 1; ++d) {

                    pass[a] = alphabet1[a];
                    pass[b] = alphabet1[b];
                    pass[c] = alphabet1[c];
                    pass[d] = alphabet1[d];
                    salt[0] = '5';
                    salt[1] = '0';



                    printf("salt:%s     \n",salt);


                }
            }
        }
    }
}
int main(int argc, string argv[1])
{
    mycrack(argv[1]);

    return 0;
}

但是如果printf应该为每次尝试打印盐(50),我会得到盐+通行证:ex

salt:50a     
salt:50ab     
salt:50abc     
salt:50abcd     
salt:50abcd     
salt:50abcd     
salt:50abcd     
salt:50abcd     
salt:50abcd     
salt:50abcd     
salt:50abcd   
请注意,我知道我不应该在循环中重新声明一个静态值,但我调整了代码,原始代码依赖于argv输入,因此更难以举例说明。

1 个答案:

答案 0 :(得分:0)

@Someprogrammerdude在评论中回答的问题:

&#34;您似乎忘记了C中的char字符串实际上称为以空字符结尾的字节字符串。空终止符很重要,不要忘记。请注意,null-terminator是字符&#39; \ 0&#39;,而不是空指针(如NULL是)。当然,这意味着两个字符的字符串需要三个字符的空格,以适应终结符。&#34;

<强>解决方案

char pass[5] = "";
char salt[3] = "";

而不是

char pass[4];
char salt[2];