Maison > Questions et réponses > le corps du texte
Comme le montre la figure, il s'agit à l'origine d'un tableau de caractères d'une longueur de 4. L'utilisation de %c pour sortir manuellement un par un s'affiche normalement. Cependant, lorsque vous utilisez %s pour sortir directement le tableau de caractères, le nombre de chiffres de sortie. n'est pas 4. Quelle est la raison ? N'y a-t-il pas de 0 à la fin de ce tableau de caractères ? Existe-t-il un moyen simple de générer rapidement une chaîne dans cette situation ? (Que se passe-t-il s'il y a un tableau de caractères d'une longueur de plusieurs centaines à afficher ? Dois-je assembler manuellement les membres du tableau de caractères un par un ?)
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
typedef struct WAV_header {
char ChunkID[4]; /* "RIFF" */
uint32_t ChunkSize; /* 36 + Subchunk2Size */
char Format[4]; /* "WAVE" */
/* sub-chunk "fmt" */
char Subchunk1ID[4]; /* "fmt " */
uint32_t Subchunk1Size; /* 16 for PCM */
uint16_t AudioFormat; /* PCM = 1*/
uint16_t NumChannels; /* Mono = 1, Stereo = 2, etc. */
uint32_t SampleRate; /* 8000, 44100, etc. */
uint32_t ByteRate; /* = SampleRate * NumChannels * BitsPerSample/8 */
uint16_t BlockAlign; /* = NumChannels * BitsPerSample/8 */
uint16_t BitsPerSample; /* 8bits, 16bits, etc. */
/* sub-chunk "data" */
char Subchunk2ID[4]; /* "data" */
uint32_t Subchunk2Size; /* data size */
} Wav_header_t;
typedef struct WAV_block_header {
char blockID[4]; /* "data" */
uint32_t blockSize; /* data size */
} Wav_block_header_t;
int main()
{
FILE *fp = NULL;
Wav_header_t header;
Wav_block_header_t block_header;
fp = fopen("test.wav", "rb");
if (!fp) {
printf("can't open audio file\n");
exit(1);
}
fread(&header, 1, sizeof(Wav_header_t), fp);
// printf("length:%d(10),0x%x, \n\n", sizeof(struct WAV_Format), sizeof(struct WAV_Format)); // 44
printf("ChunkID \t%c%c%c%c\n", header.ChunkID[0], header.ChunkID[1], header.ChunkID[2], header.ChunkID[3]);
printf("ChunkSize \t%d\n", header.ChunkSize);
printf("Format \t%s\n", header.Format);
printf("Subchunk1ID \t%x\n", header.Subchunk1ID);
printf("Subchunk1Size \t%d\n", header.Subchunk1Size);
printf("AudioFormat \t%d\n", header.AudioFormat);
printf("NumChannels \t%d\n", header.NumChannels);
printf("SampleRate \t%d\n", header.SampleRate);
printf("ByteRate \t%d\n", header.ByteRate);
printf("BlockAlign \t%d\n", header.BlockAlign);
printf("BitsPerSample \t%d\n", header.BitsPerSample);
printf("Subchunk2ID \t%s\n", header.Subchunk2ID);
printf("Subchunk2Size \t%d\n", header.Subchunk2Size);
printf("\n");
fread(&block_header, 1, sizeof(Wav_block_header_t), fp);
printf("blockID \t%s\n", block_header.blockID);
printf("blockSize \t%d\n", block_header.blockSize);
}