少し奇妙ですが、私はデータを失うようですより小さな配列から大きな配列にデータをコピーしながらstrncpyを実行します。なぜこのようなことが起こったのかはかなり分かりません。助けてください! ここにはコードがあります(より大きなコードから切り詰められています)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define SIZE_UNSIGNED_LONG_LONG 8
#define DATALEN 2048
int main(int argc, char *argv[])
{
printf("size of unsigned long long is %d n", sizeof(unsigned long long));
//unsigned long long to unsigned char
unsigned long long a = 3;
unsigned char cval[8];
cval[7] = (a & 0xFF);
cval[6] = ((a >> 8) & 0xFF);
cval[5] = ((a >> 16) & 0xFF);
cval[4] = ((a >> 24) & 0xFF);
cval[3] = ((a >> 32) & 0xFF);
cval[2] = ((a >> 40) & 0xFF);
cval[1] = ((a >> 48) & 0xFF);
cval[0] = ((a >> 56) & 0xFF);
unsigned char data[2048];
strncpy((char *)data,(char *)cval, SIZE_UNSIGNED_LONG_LONG);//destination buffer
//unsigned char to unsigned long long
unsigned long long counter = 0;
counter = counter |(data[7]);
counter = counter |(data[6]<< 8);
counter = counter |(data[5]<< 16);
counter = counter |(data[4]<< 24);
counter = counter |(data[3]<< 32);
counter = counter |(data[2]<< 40);
counter = counter |(data[1]<< 48);
counter = counter |(data[0]<< 56);
printf("Trial1: counter is = %llun", counter);
counter = 0;
counter = counter |(data[0]);
counter = counter |(data[1]<< 8);
counter = counter |(data[2]<< 16);
counter = counter |(data[3]<< 24);
counter = counter |(data[4]<< 32);
counter = counter |(data[5]<< 40);
counter = counter |(data[6]<< 48);
counter = counter |(data[7]<< 56);
printf("Trial2: counter is = %llun", counter);
return 0;
}
回答:
回答№1は2使用する代わりに strncpy()、あなたが使用する必要があります memcpy(). strncpy() ヌル( "
回答№2の場合は1
あなたの問題はそこにないかもしれません:
counter = counter |(data[3]<< 32);
警告を出します:
left shift count >= width of type