memset + whitespace + memcpy

时间:2012-01-13 12:17:48

标签: c linux memcpy memset c-strings

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

有一个char数组[100] 要做的事:将所有内容设置为空格

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

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

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

4 个答案:

答案 0 :(得分: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...]                                                                                           ]

答案 1 :(得分:0)

你会看到。请尝试以下代码:

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你不认为你需要输入强制转换为(char *)

a = (char *) malloc(LENGTH + 1);