Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
memset+;空白+;memcpy_C_Linux_Memcpy_Memset_C Strings - Fatal编程技术网

memset+;空白+;memcpy

memset+;空白+;memcpy,c,linux,memcpy,memset,c-strings,C,Linux,Memcpy,Memset,C Strings,如何将大小为100的字符数组设置为空白,然后将10个字符从另一个字符串复制到同一个字符串中。 例如: 有一个字符数组a[100] 要执行的操作:将其全部设置为空白 现在有另一个数组:b[10](假设这个数组填充了长度为9的字符串) 要执行的操作:将此数组复制到上一个数组 What iam doing is : memset(a, ' ', sizeof(a)); 350 memcpy(a,b, strlen(b)) 但是我没有得到我在复制10个字符后设置的空间。你会看到的。请尝

如何将大小为100的字符数组设置为空白,然后将10个字符从另一个字符串复制到同一个字符串中。 例如:

有一个字符数组a[100] 要执行的操作:将其全部设置为空白

现在有另一个数组:b[10](假设这个数组填充了长度为9的字符串) 要执行的操作:将此数组复制到上一个数组

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

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

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

for (int i = 0; i <= 99; i++)
    printf("%c", a[i]);
printf("\n");
对于(int i=0;i请尝试以下操作:

#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;
}

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

您不认为需要键入cast to
(char*)


不获取空格是什么意思?如果在
memset
之后终止
a
(比如
a[sizeof(a)-1]='\0'
),它应该可以工作。你的确切意思是什么?你如何检查数组?Printf?你没有做你说的事情。ideone()按你说的做,没有问题。这实际上是不正确的。斯特伦返回的字符数没有空终止字符。当他的字符串为his时(如前所述)9个字符长,strlen也将返回9。由于strlen的返回值也是memcpy的参数,memcpy也将只复制9个字节。这意味着将不会复制空终止字符!
*(a+LENGTH)
应该是
a[LENGTH]
-这就是
[]
的含义。
LENGTH[a]
也应该是正确的。但哪一个是最清晰的?这是一个主观的调用,我对此没有意见。指针算术和数组索引在语法上是正确的,就编译器而言,在效果上是等效的。
$ gcc -Wall test.c
$ ./a.out
a (before):     [...100 spaces...........]
a (after):      [abcdefghi...91 spaces...]                                                                                           ]
a = (char *) malloc(LENGTH + 1);