c++ 使用sprint格式char数组索引的分段故障(核心转储)

3j86kqsm  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(149)

需要格式化一个字符数组,但在一个for循环中的每个索引,但这在一个分段错误(核心转储)结束

#include <iostream>
#include "stdint.h"
#include <cstring> 
 
uint32_t Key = 0xbeefbabe;
 
char message[128];
char encrypted[128];
 
void offuscation () 
{   
 
    int len = strlen(message);
 
    uint8_t k1 = Key & 0xff,
            k2 = (Key >> 8) & 0xff,
            k3 = (Key >> 16) & 0xff,
            k4 = (Key >> 24) & 0xff;
 
    for( int i = 0; i < len; i ++ ) 
    {
 
        message[i] ^= k1;
        message[i] ^= k2;
        message[i] ^= k3;
        message[i] ^= k4;
 
        sprintf((char *)encrypted[i], "\\x%02X", message[i]);
 
 
 
    }
 
}
 
int main () 
{
 
    printf("\n");
 
    strcpy(message, "Help me Please");
 
    offuscation ();
 
    printf("\n\n");
 
    std::cout << encrypted << "\n";
 
}

printf(“\x%02X”,message[i]);
但这个数组的每个索引都是另一个

lf5gs5x2

lf5gs5x21#

encrypted[i]是一个单一的char-你不能把它转换成一个指针并得到一些有用的东西。
此外,如果将每个char编码为四个字符,则需要更多的空间。
大概是这样的

char message[128];
char encrypted[4 * 128];
 
void offuscation() 
{   
    int len = strlen(message);
    uint8_t k1 = Key & 0xff,
            k2 = (Key >> 8) & 0xff,
            k3 = (Key >> 16) & 0xff,
            k4 = (Key >> 24) & 0xff;
    uint8_t mask = k1 ^ k2 ^ k3 ^ k4;

    char* output = encrypted;
    for( int i = 0; i < len; i ++ ) 
    {
        output += sprintf(output, "\\x%02X", message[i] ^ mask);
    }
}

相关问题