There are many misconceptions and some other problems:
memset() does not change padded
; memset() , padded.
reset 'padded -= ssize + 1 undefined , .
:
strcpy(padded + bits - ssize, string);
:
padded -= ssize + 1;
strncpy(padded, string, ssize);
strcpy() , .
, malloc() , , . calloc().
, memset() null, .
, strncpy(), , , , , . , strcpy() .
- const char * . (static . , , .)
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static char *strpadleft(const char * string, char pad, size_t bytes)
{
size_t ssize = strlen(string);
size_t bits = bytes * 8;
char *padded = (char *) malloc(bits + 1);
assert(ssize < bits);
memset(padded, pad, bits - ssize);
strcpy(padded + bits - ssize, string);
return padded;
}
int main(void)
{
const char *data = "0100100001";
char *pad = strpadleft(data, '0', 4);
printf("Data: <<%s>> padded <<%s>> (%d)\n", data, pad, (int)strlen(pad));
free(pad);
return(0);
}
, , ssize > bits (: assert() ). , . : NOT NOT . , ; . ; , , . !
:
static char * strpadleft(const char * string, char pad, size_t bytes)
{
size_t ssize = strlen(string);
size_t bits = bytes * 8;
char *padded = (char *) malloc(bits + 1);
padded[bits] = 'X';
memset(padded, pad, bits);
strncpy(padded + bits - ssize, string, ssize);
return padded;
}
, , undefined ( , X ), :
Data: <<0100100001>> padded <<00000000000000000000000100100001X>> (33)
, "X" strncpy()! ssize + 1, strcpy()... ...