我正在编写一个函数,它使用诸如“ HELLO”之类的纯文本和诸如“ YTNSHKVEFXRBAUQZCLWDMIPGJO”之类的键(26个字母,每个字母与字母相对应,因此Y = A,T = B等)作为输入并返回明文的加密版本。
这是功能:
string encrypt(string plaintext, string key)
{
string e_word; // encrypted text (ciphertext) that will be returned by the function
int index;
for (int i = 0; i < strlen(plaintext); i++)
{
index = get_index(plaintext[i]); // index value is updated with every increment of the loop/ pass of the loop
e_word = strcat(e_word, key[index]);
}
return e_word;
}
错误指出“不兼容的整数到指针的转换,将'char'传递给类型为'const char *'的参数;以&开头的地址,并出现在下面的行:
e_word = strcat(e_word,key [index]);
错误表明在“ key [index]”之前添加了“&”。我是C语言的新手,一直在研究和研究指针,但是我在努力理解为什么在这种情况下需要使用指针。但是,我使用了一个调试器,发现index变量确实包含一个int(就像我想要的那样),但是当在“ key [index]”中使用它时,“ key [index]”返回一个内存位置(我相信)。如果我没有声明任何指针来保存变量的内存位置,为什么会发生这种情况?
假设您在某个地方有typedef char* string;
,则将您的字符串定义为一串char(acters)的数组/指针,最后一个为空终止符'\0'
。索引到字符串/ char * / char []中只会检索该char
。如果要传递一个字符串,又名char *(字符指针),则必须提供它的地址:typeof(&key[i])
== char*
,typeof(key[i])
== char
。
您的更大问题是,传入单个char时没有后面的null char '\0'
,它可能会连接垃圾,因为它不是字符串。您的目标e_word
也没有任何大小/内存(通常C不会动态为您提供内存)。您可以为其分配静态大小char e_word[256] = {{0}}
,也可以在C99 +中动态调整char e_word[strlen(plaintext)] = {{0}}
。在C语言中,将操作视为在某个位置读取/修改数据或在某个位置/变量中分配内存可能更有用。