在C函数中返回char数组

hm

我编写的一个很小的C程序有很多问题。浏览了我能找到的所有堆栈溢出文章,但没有取得太大的成功。该程序假定对纯文本字符串使用非常简单的XOR“加密”。输入字符串和键的长度均为6个字符。我是C和指针的新手。我认为我无法掌握该语言的一些基础知识。

#include <stdio.h>
#include <string.h>

#define LENGTH 7
#define KEY "secret"

char * encryptDecrypt(char *plaintext);

int main(int argc, char **argv)
{
    if(argc > 1)
    {
        char *plainText = argv[1];
        printf("Encrypting plaintext: %s (%i)\n", plainText, strlen(plainText));
        char *cipherText = encryptDecrypt(plainText);
        printf("Encrypted: %s (%i)\n", cipherText, strlen(cipherText));
        char *decryptedText = encryptDecrypt(cipherText);
        printf("Decrypted: %s (%i)\n", decryptedText, strlen(decryptedText));
    }
    return 0;
}

char * encryptDecrypt(char *text)
{
    char result[LENGTH];
    for (int i = 0; i < LENGTH-1; i++)
    {
        result[i] = (char)(text[i] ^ KEY[i]);
    }
    char *resultPtr = &result;
    return resultPtr;
}

使用arg“ foobar”输出运行程序:

加密纯文本:foobar(6)

加密:╠╠╠╠╠╠╠╠T¨(19)

解密:╠╠╠╠╠╠╠╠T¨(19)

问题:

  1. 在cryptoDecrypt函数中使用时和返回之后,将指针打印到结果数组的方式是不同的
  2. 在密文上使用XOR不会将其还原为原始的纯文本(尽管由于我打印的内容是错误的,所以这一部分可能还不错)
  3. 加密/解密文本的字符串长度为19个字符长吗?如果原始字符串是6个字符,那怎么可能?
Gmoniava
 char *resultPtr = &result;
 return resultPtr;

你做不到 result函数结束时不存在,则无法返回result

像这样修改您的功能:

void encryptDecrypt(char *text, char *result)
{
  for (int i = 0; i < LENGTH - 1; i++)
  { 
    result[i] = (char)(text[i] ^ KEY[i]);
  }
}

在调用者网站上创建一个数组,并将其作为传递result例如

char result[LENGTH] = {0}; 
encryptDecrypt(plainText, result);

注意:实际上%s,并不是最好的方法来打印加密的数据,因为例如,由于XOR,您可能会在文本之间得到一个空字节,这将被视为字符串的空终止符,并且printf不会显示其余字符的字符串。考虑类似这样的内容来打印密文。

您的格式说明符strlen也是错误的,请使用%zuinsted of %i,否则您将触发未定义的行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C / C ++函数中返回char *数组?

来自分类Dev

从C中的函数返回char数组的首选方法

来自分类Dev

从C ++中的函数返回2D char数组并打印

来自分类Dev

如何从C中的函数返回2个昏暗的char数组

来自分类Dev

C函数中的多维char数组

来自分类Dev

在C中的函数内部修改char数组

来自分类Dev

类函数中的c ++ char数组输出

来自分类Dev

C函数中的多维char数组

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

从C中的函数返回数组

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

如何从C ++中的函数返回char *

来自分类Dev

从C ++中的函数返回时,为什么char数组会丢失?

来自分类Dev

arduino,函数返回char数组

来自分类Dev

arduino,函数返回char数组

来自分类Dev

如何使C ++函数返回char数组所有排列的向量

来自分类Dev

将char数组从C ++函数返回到tcl

来自分类Dev

从Arduino中的函数返回最初未知长度的char数组

来自分类Dev

从Arduino中的函数返回最初未知长度的char数组

来自分类Dev

从C函数中的数组中返回项目

来自分类Dev

如何在C中传递函数多维char数组?

来自分类Dev

如何在C中传递函数多维char数组?

来自分类Dev

如何在函数(语言c)中获取char数组大小?

来自分类Dev

C中的Char *函数

来自分类Dev

从C ++中的函数返回多个数组

来自分类Dev

从C中的函数返回合并的数组

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

从C ++中的函数返回多个数组