0

我如何将一个大小为 100 的字符数组设置为空白,然后将 10 个宪章复制到其他相同的字符串。例如:

有一个 char 数组 a[100] 要做的事情:将其全部设置为空白

现在有另一个数组:b[10](假设它填充了一些长度为 9 的字符串)要做:将此数组复制到前一个

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

但是我没有得到我在复制 10 个字符后设置的空间。

4

4 回答 4

1

尝试以下操作:

#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...]                                                                                           ]
于 2012-01-13T12:26:56.733 回答
0

你会看到的。试试下面的代码:

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

原因是当你memcpy在字符串中a插入一个 NULL 字符a[10]。如果您只输出a,则输出将在 NULL 之前停止。

于 2012-01-13T12:23:59.263 回答
0

\0在数组的最后一个位置缺少空字符。

于 2012-01-13T12:27:05.237 回答
0

你不认为你需要输入 cast to(char *)

a = (char *) malloc(LENGTH + 1);
于 2013-10-19T01:34:43.290 回答