0

void reversefunction( const char *argv2, const char *argv3){

FILE *stream1=NULL;
FILE *stream2=NULL;

byteone table[HEADERLENGTH];
byteone numberofchannels;
byteone movebytes;

bytefour i;
bytefour sizeofdata;
bytefour var_towrite_infile;

stream1=fopen(argv2,"rb");
stream2=fopen(argv3,"wb+");

if(stream1==NULL){
    printf("\n.xX!- failed - to - open - file -!Xx.\n");
    exit(0);
}

if(stream2==NULL){
    printf("\n.xX!- failed - to - create - new - file -!Xx.\n");
    exit(0);
}

printf(".xX!- %s - opened - success -!Xx.\n",argv2);

fread(table,1,HEADERLENGTH,stream1);

// ここから問題が始まります

numberofchannels=little_endian_to_bytefour((table+22),NUMCHANNELS);
sizeofdata=little_endian_to_bytefour((table+40),SUBCHUNK2SIZE);

//ここで問題は終了

fwrite(table,1,HEADERLENGTH,stream2);

movebytes=numberofchannels*2;

i=sizeofdata;
fseek(stream1,i,SEEK_SET);

while(i>=0){
    fread(&var_towrite_infile,4,movebytes,stream1);
    fwrite(&var_towrite_infile,4,movebytes,stream2);
    i=i-movebytes;
    fseek(stream1,i,SEEK_SET);
    printf("%d\n",i);
    printf("%d\n",sizeofdata);
    printf("%d\n",little_endian_to_bytefour((table+40),SUBCHUNK2SIZE));
    printf("-------------\n");
}

fclose(stream1);
fclose(stream2);
return;

}

したがって、変数 numberofchannels と sizeofdata に関数 little_endian_to_bytefour の戻り値を渡そうとすると、何も渡されません。戻り値を出力すると、正しく出力されます。では、なぜこれが起こるのですか?

//端末の画面

.
.
.

0
0
113920
-------------
0
0
113920
-------------
0
0
113920
-------------

.
.
.

//画面端末の終了

//追加情報

typedef unsigned char byteone;

typedef unsigned short int bytetwo;

typedef unsigned int bytefour;



bytefour little_endian_to_bytefour(byteone *table, byteone bit_length){

    bytefour number=0;

    if(bit_length==2){
        number=table[1];
        number<<=8;
        number|=table[0];
    }
    else{
        number=table[3];
        number<<=8;
        number|=table[2];
        number<<=8;
        number|=table[1];
        number<<=8;
        number|=table[0];
    }

    return number;

}

小さな例/*

int myfunction(int var1, int var2)
{

  int var3;

  var3=var1+var2

  return var3;

}

int main(void){

  int zaza1;

  zaza1=myfunction(2,3);

  printf("the number is %d",zaza1);

return;
}

//ターミナル

数は0です

//端末の終了

*/

4

2 に答える 2

0
typedef unsigned char byteone;
typedef unsigned int bytefour;

bytefour little_endian_to_bytefour(byteone *table, byteone bit_length);

byteone numberofchannels;
byteone movebytes;

numberofchannels = little_endian_to_bytefour((table+22),NUMCHANNELS);
sizeofdata = little_endian_to_bytefour((table+40),SUBCHUNK2SIZE);
movebytes = numberofchannels * 2;

unsigned int戻り値をunsigned char変数に割り当てているため、値の一部が破棄されます。この場合、たまたま残りの部分がゼロです。

ここで何が意図されていたのかは明らかではありません。型を持つように変数を宣言するつもりでしたbytefourか?

警告を有効にしてコンパイルした場合は、この潜在的な問題について警告されているはずです。

于 2013-06-14T19:30:05.153 に答える