배열 변수가 변할 수 있나요???
아래코드에서...
이부분이 유독 문제를 일으키네요.
/* Index data file */ memset(pSrcIdx1, 0x00, SIZEBUFFER1K); sprintf(pSrcIdx1, "%s/%02d", pPath, i);
처음부터 에러가 나는것도 아니고,
i가 33일때 ".../data/engine/data/index/idxPersonTelno/33"
식으로 변해 버립니다. 점(.)이 세개로 늘어났습니다.
소스가 일부분이어서 좀 지저분하지만,
pPath라는 변수가 "../data/engine/data/index"를 가지고 있습니다.
헌데 이게 ".../data/engine/data/index"로 변해버립니다.
가끔 이해 할 수없는 에러가 나는군요.
제 잘못일 수도 있는데. 좀 불안하군요.
경험 많으신 분들의 조언 부탁드립니다.
...
#define UNIONPATH "%s/%s"
#define INDEXPATH "../data/engine/data/index"
...
int main(void)
{
...
IndexSave("idxPersonTelno", 100);
...
}
int IndexSave(LPCSTR pIdxName, int nCount)
{
... 생략 ...
sprintf(pPath, UNIONPATH, INDEXPATH, pIdxName);
#ifdef debug
printf("pPath: %s\n", pSrcIdx1);
#endif
for(i = 0 ; i < nCount ; i++)
{
memset(nPosIndex, 0x00, sizeof(long) * 256);
if(nCount > 100)
{
/* Index temp file */
memset(pTmpIdx, 0x00, SIZEBUFFER1K);
sprintf(pTmpIdx, "%s/%03d.tmp", pPath, i);
/* Index data file */
memset(pSrcIdx1, 0x00, SIZEBUFFER1K);
sprintf(pSrcIdx1, "%s/%03d", pPath, i);
/* Index header file */
memset(pSrcIdx2, 0x00, SIZEBUFFER1K);
sprintf(pSrcIdx2, "%s/%03d.idx", pPath, i);
}
else
{
/* Index temp file */
memset(pTmpIdx, 0x00, SIZEBUFFER1K);
sprintf(pTmpIdx, "%s/%02d.tmp", pPath, i);
/* Index data file */
memset(pSrcIdx1, 0x00, SIZEBUFFER1K);
sprintf(pSrcIdx1, "%s/%02d", pPath, i);
/* Index header file */
memset(pSrcIdx2, 0x00, SIZEBUFFER1K);
sprintf(pSrcIdx2, "%s/%02d.idx", pPath, i);
#ifdef debug
printf("pSrcIdx1 = %s\n", pSrcIdx1);
#endif
}
... 생략 ...
}
다음은 패스를 open하려다 strerror(errno)을 로그로 남긴 겁니다.
[13:28:15] *****************************
[13:28:15] ******* Start Process *******
[13:28:15] *****************************
[13:28:15] Only Person Reinding - Start
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/33] - No such file or directory
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/34] - No such file or directory
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/35] - No such file or directory
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/36] - No such file or directory
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/37] - No such file or directory
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/38] - No such file or directory
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/39] - No such file or directory
[14:34:55] ERROR : [.../data/engine/data/index/idxPersonTelno/40] - No such file or directory... 생략 ...
[14:38:55] ERROR : [.../data/engine/data/index/idxPersonTelno/96] - No such file or directory
[14:38:55] ERROR : [.../data/engine/data/index/idxPersonTelno/97] - No such file or directory
[14:38:55] ERROR : [.../data/engine/data/index/idxPersonTelno/98] - No such file or directory
[14:38:55] ERROR : [.../data/engine/data/index/idxPersonTelno/99] - No such file or directory
[14:38:59] Only Person Reinding - End
[14:38:59] *****************************
[14:38:59] ******* End Process *******
[14:38:59] *****************************
[/code]


참조
상대 경로일경우 실행 장소에 따라서 디렉토리가 변경될수 있습니다.
정확한것은
getcwd를 사용해서 현재 경로를 확인하시고 생각하시는 경로와 틀린지 맞는지 부터 확인하신후에
만약 생각하신 디렉토리가 틀리시다면 chdir로 생각하신곳으로 이동 시켜주시기 바랍니다.
그럼