从一个创建两个字符串

时间:2013-04-20 21:09:20

标签: c

有没有办法可以创建两个字符串,而第二个字符串不包含第一个字符串?

我目前有这个

char * s = "Generic String";
char foo[1];
memcpy(foo, s, 1);
char bar[2];
memcpy(bar, s, 2);
printf("%s %s\n", foo, bar);

将打印出G GeG

显然我想要打印G Ge。

3 个答案:

答案 0 :(得分:2)

C中的所有字符串都需要一个结束标记 - 即空字符。

所以代码

char foo[1];

应该是

char foo[2];

其次是

foo[0] = s[0];
foo[1] = 0;

同样的另一个。

char bar[3];
memcpy(bar, s, 2); /* As you prefer */
bar[2] = 0; /* To terminate the string */

答案 1 :(得分:1)

您需要NUL终止字符串。目前,您的程序调用未定义的行为。此外,在从字符串文字初始化时使用const char *char [],否则const正确性会被破坏。

const char *s = "Generic String";

char foo[2];
memcpy(foo, s, 1);
foo[1] = 0;

char bar[3];
memcpy(bar, s, 2);
bar[2] = 0;

printf("%s %s\n", foo, bar);

答案 2 :(得分:0)

你最后使用的字符串不为零。

选项1:限制打印宽度:

printf("%*s %*s\n", 1, foo, 2, bar);

选项2:为字符串终结符(0)分配空间。

char foo[2];
char bar[3];

memcpy(foo, s, 1);
foo[1] = 0;
memcpy(bar, s, 2);
bar[2] = 0;