我只是想知道你是否可以为我清理一些东西.
我们有一些示例代码来解释我的问题:
#include <stdio.h>
int main(void)
{
char test[100];
printf("%s",test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我没有完全弄错的话,这应该在我声明之前随机输出一些在此内存地址处的字符,如果在虚拟环境中它是空的,则应该输出.所以,这是我的理解.在我输入内容之前保存的内存被理解为char并写入终端.例如ascii'a'= 97 = 01100001.这就是它输出'a'的原因.可能是别的什么.或无.然后它停止了.
但是如果我把'a'放在第一个位置然后像这样打印:
test[0] = 'a'
printf("%s",test);
Run Code Online (Sandbox Code Playgroud)
它将输出'a',另外输出一些字符或什么都没有然后停止.
这就是我理解数组的方式:数组是指向第一个地址的指针,括号是在将数字乘以sizeof(type)后对地址进行解引用.
因此,在这种情况下,在第一个例子的内存中找到的随机01100001(Ascii'a')应该与第二个例子中故意放置的01100001(Ascii'a')的printf无法区分.然而,当我运行printf时,我没有得到100个随机输出.我得到一个.而且我不认为随机字段通常设置为'\ 0'.
这意味着,我的理解在某处肯定是错的.请帮我理解我犯错误的地方.
我正确地知道cs50编程教程.在这里,我应该破解DES加密的字符串.
首先,我专注于创建一个64位大阵列,其中包含盐中使用的所有可能的字符.
在下一步中,我将其抛入两个for循环中,以打印出这两个for循环的所有可能组合.这就是我现在所处的位置.
出于调试原因,我只是打印出来printf("%s",salt).盐被定义为char salt[2].但由于某种原因,它总是打印出来xx@(xx每次按预期更改,我不知道@它来自哪里).
首先,我认为它可能会出于一些奇怪的原因而超出阵列并@从随机存储器中获取.这就是我将它从我的在线IDE复制到我的本地XCode的原因.仍然是相同的@符号.而现在我对它的来源感到困惑@.
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define _XOPEN_SOURCE // DES - implementation
#include <unistd.h>
// shorthands
#define cypher argv[1]
#define ascii_dot 46
#define ascii_slash 47
#define ascii_zero 48
#define ascii_nine 57
#define salt_size 64
#define majA 65
#define majZ 90
#define minA 97
#define minZ 122
int main(int argc, string argv[]) {
// Checking input
if …Run Code Online (Sandbox Code Playgroud)