您如何在C语言中实现指针?

问题描述 投票:0回答:1

我正在编写一个函数,它使用诸如“ 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]”返回一个内存位置(我相信)。如果我没有声明任何指针来保存变量的内存位置,为什么会发生这种情况?

c pointers
1个回答
0
投票

假设您在某个地方有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语言中,将操作视为在某个位置读取/修改数据或在某个位置/变量中分配内存可能更有用。

© www.soinside.com 2019 - 2024. All rights reserved.