我正试图划分一个缓冲区,当时是8个字符。
我的缓冲区运行正常,我唯一没有线索的是如何做到这一点。
我现在拥有的是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void splittingFunction(FILE *filePtr, long fileLength)
{
char *buffer=(char*)malloc(fileLength+1);
if(!buffer)
printf("Out of Memory");
n=fread(buffer, fileLength, 1, filePtr);
for(i=0; i<fileLength; i++)
printf("%c",buffer[i]);
free(buffer);
}
所以这会将我打印到屏幕上:
10111010001101000001000000111010001101000011001010010000001100001011100100110110101111001001000000110111101100110001000000111010001101000011001010010000001100100011001010110000101100100001011100000110100001010010101000110100001100101001000000100111001101001011001110110100001110100001000000100101101101001011011100110011
我想做的是:
arr[]={"10111010","00011010","00000100", ...}
我知道这可能听起来很傻,但我似乎无法弄明白。任何帮助将不胜感激
答案 0 :(得分:3)
计算数组arrSize
的长度(缓冲区长度除以8,如果余数不为零则加1)
创建一个char[9]
的可变长度数组,其大小在步骤1中计算,即char arr[arrSize][9]
使用从0到for
的{{1}}循环(不包括在内)。使用arrSize
计算缓冲区中的位置,并复制8个字节(如果它不是最后一个字符串)或更少(如果它是最后一个字符串)。您可以使用i * 8
或者,如果您的平台拥有strncpy
,则可以使用strlcpy
,这样做会更安全一些。如果您没有使用strlcpy
,请务必将空终结符放在最后。此外,请确保不要通过写入超过9个字符来溢出缓冲区(strncpy
或strlcpy
不应该发生,但如果您执行其他操作,请注意这一点。/ p>
答案 1 :(得分:1)
使用"%.*s"
一次最多打印8个字符。
"%s"
可以打印多个字符。
size_t n = fread(buffer, fileLength, 1, filePtr);
int delta;
for(size_t i=0; i<n; i += delta) {
delta = 8;
if (fileLength - i < delta) delta = fileLength - i;
printf("\"%.*s\"," delta, buffer + i);
}
或者通过将空字符附加到buffer[]
size_t n = fread(buffer, fileLength, 1, filePtr);
buffer[n] = '\0';
for(size_t i=0; i<n; i += 8) {
printf("\"%.8s\",", buffer + i);
}