Я думаю, что самый чистый способ сделать это - сразу после выделения массива и присвоения ptr началу buf . Просто заполните все с помощью ' '
, используя memset () .
char buf[50];
char *ptr = buf;
memset (ptr, ' ', sizeof(buf)); // like this
// If this buffer is meant to be printed to the screen or used as a string,
// it's probably better to write the end-of-string character at the last
// position of the buffer:
buf[49] = 0;
// operations to write stuff on the buffer
Таким образом, в конце ваших операций все оставшиеся места в буфере, которые не были использованы, будут иметь ' '
.
EDIT:
Я думал о том, что вы спросили, и если у вас нет особых причин для заполнения массива пробелами , как правило, мы не справляемся с этой ситуацией (см. Мой комментарий ниже этого ответа).
char* tmp_string = "**Copy Me**";
printf("Size of string:%d\n", strlen(tmp_string));
char buf[50];
printf("Size of buf:%d\n", sizeof(buf));
memset(buf, 0, sizeof(buf)); // cleaning the entire buffer
char *ptr = buf;
strncpy(ptr, tmp_string, strlen(tmp_string));
ptr += strlen(tmp_string);
*ptr = '!';
printf("Size of buf after copy: %d\n", strlen(buf));
printf("Result: %s\n", buf);
Выходы:
Size of string:11
Size of buf:50
Size of buf after copy: 12
Result: **Copy Me**!
Обратите внимание , что размер буфера после копирования равен 12. Это потому, что мы обнулили буфер в начале операций (т.е. заполнил буфер \0
). При первом знаке \0
в буфере printf () прекращает итерацию в массиве и печатает символы.
ОДНАКО , я могу вспомнить одну хорошую причину, почему вы не хотите этот метод. Ниже приведено небольшое изменение кода выше. Он заполняет буфер пробелами и добавляет символ конца строки (\0
) в последней позиции буфера. Обратите внимание , что размер строки в конце не 12! Это 49 , потому что вы заполнили буфер допустимыми символами.
char* tmp_string = "**Copy Me**";
printf("Size of string:%d\n", strlen(tmp_string));
char buf[50];
printf("Size of buf:%d\n", sizeof(buf));
memset(buf, ' ', sizeof(buf)); // cleaning the entire buffer with empty spaces
buf[49] = 0; // setting a \0 at the end of the string
char *ptr = buf;
strncpy(ptr, tmp_string, strlen(tmp_string));
ptr += strlen(tmp_string);
*ptr = '!';
printf("Size of buf after copy: %d\n", strlen(buf));
printf("Result: %s\n", buf);
Выходы:
Size of string:11
Size of buf:50
Size of buf after copy: 49
Result: **Copy Me**!