strtol は、テキスト ファイルを読み取って取得した文字列を変換しません。
int getNumFiles(int archive){
off_t cur=lseek(archive,20,SEEK_SET);
if(cur==-1){
printf("lseek ERROR\n");
exit(-1);
}
bool b=true;
char headerSizeBuffer[4];
char *end;
while(b){
int numRead=read(archive,headerSizeBuffer,3);
if(numRead != 3){
printf("read ERROR\n");
exit(-1);
}
headerSizeBuffer[3]='\0';
printf("headerSizeBuffer=%s with length=%ld\n",headerSizeBuffer,strlen(headerSizeBuffer));
long headerSize=strtol(headerSizeBuffer,&end,10);//atol(headerSizeBuffer);
printf("headerSize=%ld\n",headerSize);
if (!*end)
printf("Converted successfully\n");
else
printf("Conversion error, non-convertible part: %s\n", end);
b=false;
}
return 1;
}
コンパイルされたコードを実行すると、コンソールにこれが表示されます
headerSizeBuffer=031l_archive with length=12
headerSize=31
Conversion error, non-convertible part: l_archive
やりたいことは、031 を値 31 の long または int に変換することだけです。