C 有人帮我解决这个问题吗

C 有人帮我解决这个问题吗,c,steganography,C,Steganography,我的解码器有问题,不知是否有人能帮我解决 基本上,我正在尝试为我的隐写术编码器构建一个解码器,编码器将消息中的一个位放在声音文件中每个字节的LSB上 解码器的任务是收集这些比特并从中创建新消息 该代码旨在执行以下操作: 代码:全选 转到消息数组位置 将bitindex设置为0,增量为7/(8位为一个字节) 转到声音阵列位置 如果soundbit等于0,则将0添加到新字节,否则将1添加到新字节的末尾 新字节 执行一次位向左移位 增量指数 通过使用各种printf,我可以告诉您,它在崩溃前平稳运

我的解码器有问题,不知是否有人能帮我解决

基本上,我正在尝试为我的隐写术编码器构建一个解码器,编码器将消息中的一个位放在声音文件中每个字节的LSB上

解码器的任务是收集这些比特并从中创建新消息

该代码旨在执行以下操作:

代码:全选

  • 转到消息数组位置

  • 将bitindex设置为0,增量为7/(8位为一个字节)

  • 转到声音阵列位置

  • 如果soundbit等于0,则将0添加到新字节,否则将1添加到新字节的末尾 新字节

  • 执行一次位向左移位

  • 增量指数

通过使用各种
printf
,我可以告诉您,它在崩溃前平稳运行了大约3/4次

希望这是有意义的实际循环如下所示:

 {


int mIndex, sIndex, bitIndex, mask;
char *message[9];

mask = 1;
mIndex = 0;


unsigned char *soundFile = LoadWavAudioFile("boomedit.wav");

int soundFileSize = GetSizeOfWavFile();



bitIndex = 0;

    for(mIndex = 0; mIndex < 8; mIndex++)//index for message
    {
        printf("1\n");
        for(sIndex = 0; sIndex < soundFileSize; sIndex++)//index for soundfile
        {
            printf("2\n");
            for(bitIndex = 0; bitIndex < 8;)
            {
                printf("3\n");
                int test;
                if((soundFile[sIndex] & mask) > 0)//is message bit > 0
                {                                   
                    printf("++++++++++++++++\n");
                    *message[mIndex] = (soundFile[sIndex] | 1);//adds a one to message byte
                    *message[mIndex] = *message[mIndex] <<1;    //shift bits 1 placce left
                    printf("*****************\n");

                }
                else
                { //no change the LSB to 0
                    printf("------------------\n");
                    *message[mIndex]= soundFile[sIndex] & 254; //adds a zero at end o
                    *message[mIndex] = *message[mIndex] <<1; //shifts bits 1 place to left
                    printf("******************\n");
                }

                bitIndex++;
            }   
        }
    }

printf("\n hiddden letters:%s\n", *message); //print message    
printf("\nalert 5\n");

}
{
int mIndex、sIndex、bitIndex、mask;
字符*消息[9];
掩码=1;
mIndex=0;
unsigned char*soundFile=LoadWavAudioFile(“boomedit.wav”);
int soundFileSize=GetSizeOfWavFile();
bitIndex=0;
for(mIndex=0;mIndex<8;mIndex++)//消息索引
{
printf(“1\n”);
for(sIndex=0;sIndex0)//消息位是否大于0
{                                   
printf(“+++++++++++++++++++++\n”);
*message[mIndex]=(声音文件[sIndex]| 1);//在消息字节中添加一个

*message[mIndex]=*message[mIndex]在您发布的代码中,
sIndex
在您到达第一个
if
语句时将等于
soundFileSize
。从这里看,您好像在读取数组末尾的一个,
soundFile
(假设数组的大小实际上是
soundFileSize
)问题在于:

char *message[9];
您已经创建了一个9个指向字符的指针数组,您没有给它们分配任何值或分配任何内存。它们是未初始化的

您现在要做的第一件事是遵从其中一个未初始化的指针:

*message[mIndex] =
所以你崩溃了


编辑:

您可以通过以下方式将其初始化为所有
NULL
s:

char *message[9] = {0};
但您仍然不能使用它,因为它只会在延迟空指针时出错。您必须为这些指针分配一些内存以使其有用。例如,您可以执行以下操作:

message[0] = malloc(100); // I don't know how much you need for your strings
message[1] = malloc(100); // that's up to you, so I'm just arbitrally picking 100 bytes
message[2] = malloc(100); // here to illustrate the point.
message[3] = malloc(100);
message[4] = malloc(100);
message[5] = malloc(100);
message[6] = malloc(100);
message[7] = malloc(100);
message[8] = malloc(100); 
完成后,您必须释放它们中的每一个。这是您想要的吗?一个字符串数组

这一行:

printf("\n hiddden letters:%s\n", *message); //print message 

对我来说,这意味着您实际上只需要一个字符串…

哪一行有错误?如何声明和初始化
消息和
声音文件?(发布代码时不要使用制表符,而是使用4个空格)缺少开括号(
{
)对于sIndex for循环。这是一个输入错误吗?您也…从未使用过bitIndex?我认为缺少括号是一个输入错误。在将位添加到我的新消息数组时,它会出错。
for(sIndex=0;sIndex
=>wat?当我为消息分配位时,SEGFULT从该区域开始。我不明白哪里出了问题,尽管它看起来很好,嗯,你说它的读数超过声音文件的末尾是什么意思。基本上,我使用我的老师提供的函数查找声音文件的大小2分钟让我看看,然后我会发消息e backI通过char*message[9]={}对数组进行初始化,但它仍然存在crashes@Babbleshack-这是因为它们还没有初始化。请参阅我的编辑。我的任务是在声音文件中隐藏一条消息,然后检索同一条消息,我可以使用for循环初始化数组中的所有单元格吗?正如您所知,我没有这么久。@Babbleshack-当然,只需更改增量即可将一部分添加到for循环的计数器,这就是它的全部内容。