Windows 사용Labwindows/CVI C 프로그램이 2573 번호를 싫어하게 만들 수 있습니까?
그래서 이진 파일에서 부호없는 int 데이터 값 목록을 읽습니다. 파일에는 여러 개의 데이터 세트가 순차적으로 나열되어 있습니다. 여기의 시작 숯불 * 가리키는에서 하나의 데이터 집합을 읽을 수있는 기능입니다 :
function read_dataset(char* stream, t_dataset *dataset){
//...some init, including setting dataset->size;
for(i=0;i<dataset->size;i++){
dataset->samples[i] = *((unsigned int *) stream);
stream += sizeof(unsigned int);
}
//...
}
경우이 같은 맥락에서 read_dataset : 내 루프가 표시 될 때까지
//...
char buff[10000];
t_dataset* dataset = malloc(sizeof(*dataset));
unsigned long offset = 0;
for(i=0;i<number_of_datasets; i++){
fseek(fd_in, offset, SEEK_SET);
if((n = fread(buff, sizeof(char), sizeof(*dataset), fd_in)) != sizeof(*dataset)){
break;
}
read_dataset(buff, *dataset);
// Do something with dataset here. It's screwed up before this, I checked.
offset += profileSize;
}
//...
모든 것이 순조롭게 진행 갑자기 무작위로 거대한 숫자가 뱉어 내기 시작합니다. 당신이 그 진수 번호가 의심스러운 생각한다면
...
1831
2229
2406
2637
2609
2573
2523
2247
...
해야 어떤 예를 들어
, 당신 말이 맞아,
...
1831
2229
2406
2637
2609
0xDB00000A
0xC7000009
0xB2000008
...
된다. 변경된 값의 16 진수 값을 알고 보니 정말 잘 알고 :
2573 -> 0xA0D
2523 -> 0x9DB
2247 -> 0x8C7
그래서 분명히이 번호 2573는 바이트를 얻기 위해 내 스트림 포인터가 발생합니다. 이것은 다음 데이터 집합이로드되고 구문 분석 될 때까지 남아 있으며 신은 2573 번을 포함하는 것을 금지합니다.이 문제가 발생한 지점을 확인하고 2573에서 각 체크를 시작했습니다.
나는 ' 나는 C의 세계에서 그렇게 재능이 없습니다. 무엇이이 문제를 야기 할 수 있었는지는 완전히 불투명합니다.
좋은 점 (그리고 잘된 것 - 15 자로 만들기 위해서!) –
고마워요. 제 방식의 오류를 이해합니다. (예, "b"를 잊었습니다.) –
나는 occasonally "b"를 잊어 버렸고, 증상을인지했다. –