私はファイルを8進数にダンプする関数を書いています。行の文字数の制限に達すると、渡されるファイルの印字可能な文字を出力することが考えられます。文字列配列の特定の部分を印刷するにはどうすればよいですか?
何らかの理由で私のプログラムがテキストファイルの最初の16文字を常に出力しますが、残りの文字をファイルにどのように表示しますか?ここで
は、私がテストに使用しているテキストファイルです:ここで
?asdfadsbgasdfassadfasdfsadfads
asdf
asdf
asd
v
asdf
asdf
asd
f
asdf
はstdoutに出力されます。ここでは
0000000 77 141 163 144 146 141 144 163 142 147 141 163 144 146 141 163 | ?asdfadsbgasdfas
0000020 163 141 144 146 141 163 144 146 163 141 144 146 141 144 163 15 | ?asdfadsbgasdfas
0000040 12 141 163 144 146 15 12 141 163 144 146 15 12 141 163 144 | ?asdfadsbgasdfas
0000060 15 12 166 15 12 141 163 144 146 15 12 141 163 144 146 15 | ?asdfadsbgasdfas
0000100 12 141 163 144 15 12 146 15 12 141 163 144 146 15 12 ?asdfadsbgasdfa
0000120
は私のコードです:
void octaldump(FILE * fp)
{
int c;
size_t linecount = 0, index = 0, i;
long int address = 0;
char temp [LINESIZE];
while((c = fgetc(fp)) != EOF)
{
if(linecount == 0)
{
printf("%07o ", address);
address += 16;
}
temp[index] = c;
index++;
printf("%02o ", c);
linecount++;
if(linecount == 16)
{
printf(" | ");
for(i = 0; i < linecount; i++)
{
if(temp[i] <= 32)
{
printf(".");
}
else
{
printf("%c", temp[i]);
}
}
printf("\n");
linecount = 0;
}
}
if(linecount < 16)
{
for(i = 0; i < linecount; i++)
{
if(temp[i] <= 32)
{
printf(".");
}
else
{
printf("%c", temp[i]);
}
}
}
printf("\n%07o ", address);
}
あなたの代わりに '"%の02oの '「%の03oを」'使用する場合は、より良い出力を出し出会いたいです"。 ''の 'isprint()'を参照することもできます。 –