如何将此数组作为字符串返回?

时间:2017-05-12 06:54:19

标签: c arrays string pointers return-value

    static char* test_encrypt_ecb_verbose(char* plain_text_char, char* key_char)
{
uint8_t i,j, buf[64];
uint8_t plain_text[64];
uint8_t* outstr;
outstr = '\0';
memcpy(key,key_char,16) ;
memcpy(plain_text, plain_text_char, 64);
memset(buf, 0, 64);

printf("ECB encrypt verbose:\n\n");
printf("plain text:\n");
for(i = (uint8_t) 0; i < (uint8_t) 4; ++i)
{
    phex(plain_text + i * (uint8_t) 16);
}
printf("\n");

printf("key:\n");
phex(key);
printf("\n");

// print the resulting cipher as 4 x 16 byte strings
printf("ciphertext:\n");
for(i = 0; i < 4; ++i)
{
    AES128_ECB_encrypt(plain_text + (i*16), key, buf+(i*16));
    phex(buf + (i*16));
//function to encrypt
}
printf("decryptedtext:\n");
for (i = 0; i < 4; ++i)
{
    AES128_ECB_decrypt(buf + (i * 16), key, plain_text + (i * 16));
    phex(plain_text + (i * 16));
//function to decrypt
}
//memcpy(outstr, buf, 64);

for (i = 0; i < 4; i++)
{
    for (j = 0; j < 16; j++)
    {
        outstr[j] = buf + (i * 16);
    }
}

在上面的代码片段中,我希望将加密后的输出数组作为字符串返回。我的两次尝试都在最后。但那些不正确。任何人都可以建议正确的方法吗?

2 个答案:

答案 0 :(得分:0)

char数组和char指针不是一回事。

如果您需要更多详细信息,请参阅this post

它将为您提供从char数组中获取char *的解决方案

char* p = &a[0];

a是你的char数组,是你的目标指针 然后返回你的指针。使用您的代码,您还可以直接使用您获得的char *作为函数参数

答案 1 :(得分:0)

要取回它,你应该添加一个额外的参数:

static void test_encrypt_ecb_verbose(char* plain_text_char, char* key_char, char** cipher_text_char)
{
    ... your function ...

    *cipher_text_char = malloc(64);
    memcpy(*cipher_text_char, buf, 64);
}

来自你的来电者

char* cipher_text_char = NULL;

test_encrypt_ecb_verbose(plain_text_char, key_char, &cipher_text_char);

执行test_encrypt_ecb_verbose后,cipher_text_char将指向函数内部分配的内存。

作为一个例子考虑一下:

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

char* myfunc(char* src, char** dst, int len)
{
    *dst = (char*)malloc(len);

    memcpy(*dst, src, len);

    return *dst;
}

int main(int argc, char* argv[])
{
    char* src = "MyFuncTest";
    char* dst = NULL;
    char* p = NULL;

    p = myfunc(src, &dst, strlen(src) + 1);

    printf("dst = %s\n", dst);
    printf("p = %s\n", p);

    return 0;
}

输出结果为:
dst = MyFuncTest
p = MyFuncTest