memset + пробел + memcpy - PullRequest
       36

memset + пробел + memcpy

0 голосов
/ 13 января 2012

Как я могу установить массив символов, скажем, размером 100 в пробел, а затем скопировать 10 символов в ту же строку из другого.Например:

есть один массив символов a [100]. Для этого: установите все это в пробел

Теперь есть другой массив: b [10] (предположим, что он заполненстрока длины 9) Для этого: скопируйте этот массив в предыдущий

What iam doing is : memset(a, ' ', sizeof(a));
350         memcpy(a,b, strlen(b))

Но я не получаю место, которое я установил после того, как было скопировано 10 символов.

Ответы [ 4 ]

1 голос
/ 13 января 2012

Попробуйте следующее:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LENGTH 100

int main(int argc, char *argv[])
{
    char *a = NULL;
    char b[10] = "abcdefghi"; /* note that this has a trailing null character */

    a = malloc(LENGTH + 1);
    if (a) {
        *(a + LENGTH) = '\0';
        memset(a, ' ', LENGTH);
        fprintf(stdout, "a (before):\t[%s]\n", a);
        memcpy(a, b, sizeof(b) - 1); /* strip trailing null */
        fprintf(stdout, "a (after):\t[%s]\n", a);
        free(a);
    }

    return EXIT_SUCCESS;
}

Запуск этого:

$ gcc -Wall test.c
$ ./a.out
a (before):     [...100 spaces...........]
a (after):      [abcdefghi...91 spaces...]                                                                                           ]
0 голосов
/ 19 октября 2013

вам не кажется, что вам нужно набрать приведение к (char *)

a = (char *) malloc(LENGTH + 1);
0 голосов
/ 13 января 2012

Вы пропускаете нулевой символ \0 в последней позиции массива.

0 голосов
/ 13 января 2012

Вот увидишь. Попробуйте следующий код:

for (int i = 0; i <= 99; i++)
    printf("%c", a[i]);
printf("\n");

Причина в том, что когда memcpy строка соответствует a, символ NULL помещается в a[10]. Если вы выводите только a, выход прекратится непосредственно перед NULL.

...