-2

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

我目前有这个

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。

4

3 回答 3

2

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

所以代码

char foo[1];

应该

char foo[2];

其次是

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

另一个也一样。

IE

char bar[3];
memcpy(bar, s, 2); /* As you prefer */
bar[2] = 0; /* To terminate the string */
于 2013-04-20T21:12:05.550 回答
1

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

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);
于 2013-04-20T21:12:35.600 回答
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;
于 2013-04-20T21:13:59.523 回答