C 函数在中多次运行以进行迭代

C 函数在中多次运行以进行迭代,c,for-loop,C,For Loop,我有一个C程序的问题,我目前正在为一个学校项目开发。 问题是,我必须做一个SDNV(自定界数值)模拟器。在我决定实现一个删除数组左侧字节0(0x00)的函数之前,程序一直运行良好 当我这样做的时候,我的程序开始显示一些不稳定的行为。在我的代码中的某个点上,我打印了原始数组中的位,这些位尚未转换为SDNV格式,这就是问题所在,除了迭代运行正确的次数外,其中的函数运行更多次,并且具有随机值,我用printf测试了它,以确认for的运行次数正确 我试着做了很多事情来解决这个问题,但没能,所以,如果有人

我有一个C程序的问题,我目前正在为一个学校项目开发。 问题是,我必须做一个SDNV(自定界数值)模拟器。在我决定实现一个删除数组左侧字节0(0x00)的函数之前,程序一直运行良好

当我这样做的时候,我的程序开始显示一些不稳定的行为。在我的代码中的某个点上,我打印了原始数组中的位,这些位尚未转换为SDNV格式,这就是问题所在,除了迭代运行正确的次数外,其中的函数运行更多次,并且具有随机值,我用printf测试了它,以确认for的运行次数正确

我试着做了很多事情来解决这个问题,但没能,所以,如果有人知道发生了什么,如果你能帮我解决这个问题,我将非常感激

其他信息:
只有当我实际调用函数删除0时,问题才会出现
即使在打印位后调用函数,也会出现此问题
只有当要打印的数字大于0x7f时,才会出现此问题

这是完整的代码,我对代码中的葡萄牙语感到抱歉,但我的老师要求我们这样做,以便他能更好地理解它

更新的代码,我试图制作一个最小的代码将其放在这里,问题出现在添加
converte
函数时

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#define TAMANHOVETOR 2

typedef unsigned char byte;

void removeZerosAEsquerda(byte *vetor, int *tamanho);
void _printBits(byte num);
void converte(byte *vetorOriginal, byte *vetorConvertido, int tamanhoVetor);
void inverteVetor(byte *vetor, int tamanhoVetor);

void main(){
    byte vetor[100]={0x00, 0x9f};
    byte vetorC[100];
    int i, sizeVetor=TAMANHOVETOR;
    for(i=0;i<sizeVetor;i++){
        printf("%x ", vetor[i]);
    }
    for(i=0;i<sizeVetor;i++){
        printf("\nDentro do for, imprimindo em bits valor %x", vetor[i]);
        _printBits(vetor[i]);
    }
    removeZerosAEsquerda(vetor, &sizeVetor);
    converte(vetor, vetorC, sizeVetor);
}

void removeZerosAEsquerda(byte *vetor, int *tamanho){
    byte vetorAux[100];
    int index = 0, indexAux=0, novoTamanho=0;
    while(vetor[index]==0x00){
        index++;
    }
    for(;index<*tamanho;index++){
        vetorAux[indexAux]=vetor[index];
        novoTamanho++;
    }
    for(index=0;index<novoTamanho;index++){
        vetor[index]=vetorAux[index];
    }
    *tamanho=novoTamanho;
}

void _printBits(byte num){
    int index=0;
    byte bit;
    printf("\n_printBits num=%u\n", num);
    for(index=7;index>=0;--index){
        bit=(num & (1 << index));
        printf("\nBIT: %u\tIndex: %d\t", bit>>index, index);
        bzero(&bit,1);
    }
}


void converte(byte *vetorOriginal, byte *vetorConvertido, int tamanhoVetor){
    int indexVetorOriginal=tamanhoVetor-1, indexVetorConvertido=0, indexBitsOriginal=0,indexBitsConvertido=0, controle=0;
    byte bit;
    while(indexVetorOriginal>=0){
        if(indexBitsConvertido==7){
            //ultimo bit de cada serie, setar pra 0 se for a primeira execução, caso contrário setar pra 1
            if(indexVetorConvertido==0){
            //primeiro bit sendo convertido, setar pra 0
                vetorConvertido[indexVetorConvertido] &= ~(1 << indexBitsConvertido);
            }
            else{
                //outros bits, setar pra 1
                vetorConvertido[indexVetorConvertido] |= 1 << indexBitsConvertido;
            }
            bit=(vetorOriginal[indexVetorOriginal] & (1 << indexBitsOriginal));

           if(((bit>>indexBitsOriginal)==0)&&indexVetorOriginal==0){
                //verificação para garantir que no ultimo byte, caso o ultimo bit seja 0 ele seja desconsiderado
                indexBitsOriginal=(indexBitsOriginal+1)%8;
                controle=1;
            }
        }
        else{
            //Default Case
            bit=(vetorOriginal[indexVetorOriginal] & (1 << indexBitsOriginal));
            if((bit>>indexBitsOriginal)==1){
                //setando bit pra 1
                vetorConvertido[indexVetorConvertido] |= 1 << indexBitsConvertido;
            }else{
                //setando bit pra 0
                vetorConvertido[indexVetorConvertido] &= ~(1 << indexBitsConvertido);
            }
            indexBitsOriginal=(indexBitsOriginal+1)%8;
        }
        indexBitsConvertido=(indexBitsConvertido+1)%8;
        if(indexBitsConvertido==0){
            indexVetorConvertido++;
        }
        if(indexBitsOriginal==0){
            indexVetorOriginal--;
        }
        bzero(&bit, 1);
    }
    if(controle==0)
    {
        while(indexBitsConvertido<7)
        {
            //é necessario setar os bits até a posicao 6 pra 0, e á 7 pra 1
            vetorConvertido[indexVetorConvertido] &= ~(1 << indexBitsConvertido);
            _printBits(vetorConvertido[indexVetorConvertido]);
            indexBitsConvertido++;
        }
        vetorConvertido[indexVetorConvertido] |= 1 << 7;
        indexVetorConvertido++;
    }
    //depois de convertido, o vetor deve ser invertido
    inverteVetor(vetorConvertido,indexVetorConvertido);
}


void inverteVetor(byte *vetor, int tamanhoVetor)
{
    int index, indexAux=0;
    byte vetorAux[100];
    for(index=tamanhoVetor-1;index>=0;index--){
        vetorAux[indexAux]=vetor[index];
        indexAux++;

    }
    for(index=0;index<tamanhoVetor;index++){
        vetor[index]=vetorAux[index];
    }
}
#包括
#包括
#包括
#定义TAMANHOVETOR 2
typedef无符号字符字节;
void removeZerosaQuerda(字节*vetor,int*tamanho);
void_打印位(字节数);
无效转换(字节*vetorOriginal,字节*vetorConvertido,int-tamanhoVetor);
无效逆变器(字节*逆变器,int tamanhoVetor);
void main(){
字节vetor[100]={0x00,0x9f};
字节vetorC[100];
int i,sizeVetor=塔曼霍夫特;

对于(i=0;iTR;DR.请缩小您的问题范围。请提供一个刚做过的,抱歉我之前没有做过,不知道必须做。这是显示问题的代码的最低版本,非常感谢提示,它确实很容易清理,现在我知道问题只在添加和调用函数
converte时出现
到code你的converte函数调用_printBits。与for循环无关-计算机也在做你告诉它的事情。完全独立,但你的代码没有按照规定编译-你需要使用int main(),而不是void main()事实上,它修复了…如此愚蠢的事情…我甚至为它感到尴尬,但有时你花了太多时间查看代码,以至于必须由另一个人来指向你。非常感谢你的帮助!在我看到错误之前,你可能为我省下了很多麻烦。
void main
的东西只是复制时的一个错误在这里粘贴代码时,在原始代码中定义为int。