scanf 버그 인가요?
"string 123123 123123 . . . 0.5"
이와 같은 라인(공백은 탭)을 1, 6번째 데이터를 무시하고 fscanf로 읽고자 하여
fscanf(fp, "%*s %d %d %s %s %*[^\t] %lf",
&bank->data[i][j].str,
&bank->data[i][j].end,
data1,
data2,
&bank->data[i][j].value);
와 같이 하면 다른 값을 다 읽히는데 value값은 읽어지지 않고 값을 찍어보면 0.0000(초기 값)이 나옵니다..
구조체는 대략
struct data {
int str, end;
double value;
};
와 같은 형태이고, bank 구조체가 포인터로 data구조체를 가리키고 있습니다.
참고로 fscanf에서 &bank->data[i][j].value 값 대신에 다음과 같이 double로 선언한 지역변수 value을 넣으면 값(0.5)이 읽어집니다ㅠ
fscanf(fp, "%*s %d %d %s %s %*[^\t] %lf",
&bank->data[i][j].str,
&bank->data[i][j].end,
data1,
data2,
&value);
현재는 value로 값을 읽고 그 값을 bank->data[i][j].value에 복사하는 방법을 사용하고 있는데
삽질을 아무리 해도 도무지 이해가 가질 않습니다.
어떤 잠재적인 문제가 있을 수 있을까요?
혹은 버그일까요?ㅜ 너무 답답하네요
시스템은 64비트 센토스, 리눅스 2.6.32, gcc 4.4.6 입니다.
scanf의 버그이거나, 컴파일러의 버그일가능성은
scanf의 버그이거나, 컴파일러의 버그일가능성은 0라고 생각하셔도 됩니다.
말씀하신대로 아래것은 되는데, 위의 것은 안된다면
여기에 말씀하지 않으신 다른 어떤 곳에 버그가 있습니다.
data의 2차원 배열과 관련된 메모리 에러로 추정됩니다.
에러를 재현하는 최소한의 코드를 만드셔서 올려보시죠..
value가
str, end 뒤에 값을 얻어오도록 해보시죠?
위에서처럼 data1, data2 뒤가 아니라요..
댓글 달기