我有一大堆内存我正在堆上声明。
char *str;
str = (char *)malloc(sizeof(char) * 10);
我有一个const字符串。
const char *name = "chase";
由于*name
比10
短,我需要用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]);
}
答案 0 :(得分:1)
正如其他人指出的那样,你需要
//malloc casting is (arguably) bad
str = malloc(sizeof(char) * 11);
然后,就这样做
snprintf(str, 11, "%10s", name);
使用snprintf()
代替sprintf()
可以防止溢出,%10s
会根据需要填充结果字符串。
答案 1 :(得分:0)
如果您希望str
有10个字符且仍然是C字符串,则需要'\0'
终止它。您可以malloc
str
将str = malloc(11);
改为11:
malloc
注意,不需要转换sizeof(char)
的返回指针。此外,char
始终为1,因此无需将其乘以您想要的malloc
个数。
根据需要memset
尽可能多的内存后,您可以使用char
将所有' '
设置为'\0'
(空格字符),但最后一个元件。最后一个元素必须是memset(str, ' ', 10);
str[10] = '\0';
:
memcpy
现在,使用const
将str
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;
}