当时拆分字符串8个字符

时间:2018-01-03 17:09:23

标签: c

我正试图划分一个缓冲区,当时是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", ...}

我知道这可能听起来很傻,但我似乎无法弄明白。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

  1. 计算数组arrSize的长度(缓冲区长度除以8,如果余数不为零则加1)

  2. 创建一个char[9]的可变长度数组,其大小在步骤1中计算,即char arr[arrSize][9]

  3. 使用从0到for的{​​{1}}循环(不包括在内)。使用arrSize计算缓冲区中的位置,并复制8个字节(如果它不是最后一个字符串)或更少(如果它是最后一个字符串)。您可以使用i * 8或者,如果您的平台拥有strncpy,则可以使用strlcpy,这样做会更安全一些。如果您没有使用strlcpy,请务必将空终结符放在最后。此外,请确保不要通过写入超过9个字符来溢出缓冲区(strncpystrlcpy不应该发生,但如果您执行其他操作,请注意这一点。

答案 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);
}