如何在c中用char复制字符串char?

时间:2014-02-23 02:58:40

标签: c

我有一大堆内存我正在堆上声明。

char *str;
str = (char *)malloc(sizeof(char) * 10);

我有一个const字符串。

const char *name = "chase";

由于*name10短,我需要用str加5个空格填充chase

我试图循环并设置str[i] = name[i],但是有些东西我没有匹配,因为我无法为其他字符分配空格。这就是我要去的地方,只是试图用str填充所有空间来开始

int i;
for (i = 0; i < 10; i++)
{
    strcpy(str[i], ' ');
    printf("char: %c\n", str[i]);
}

3 个答案:

答案 0 :(得分:1)

正如其他人指出的那样,你需要

 //malloc casting is (arguably) bad
 str = malloc(sizeof(char) * 11);

然后,就这样做

 snprintf(str, 11, "%10s", name);

使用snprintf()代替sprintf()可以防止溢出,%10s会根据需要填充结果字符串。

http://www.cplusplus.com/reference/cstdio/snprintf/

答案 1 :(得分:0)

如果您希望str有10个字符且仍然是C字符串,则需要'\0'终止它。您可以malloc strstr = malloc(11); 改为11:

malloc

注意,不需要转换sizeof(char)的返回指针。此外,char始终为1,因此无需将其乘以您想要的malloc个数。

根据需要memset尽可能多的内存后,您可以使用char将所有' '设置为'\0'(空格字符),但最后一个元件。最后一个元素必须是memset(str, ' ', 10); str[10] = '\0';

memcpy

现在,使用conststr C字符串复制到memcpy(str, name, strlen(name));

{{1}}

答案 2 :(得分:0)

易于使用像这样的snprintf

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

int main(){
    char *str;
    str = (char *)malloc(sizeof(char)*10+1);//+1 for '\0'
    const char *name = "chase";

    snprintf(str, 11, "%-*s", 10, name);//11 is out buffer size
    printf(" 1234567890\n");
    printf("<%s>\n", str);
    return 0;
}