有没有一种方法可以创建两个字符串,而第二个字符串不包含第一个字符串?
我目前有这个
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。
有没有一种方法可以创建两个字符串,而第二个字符串不包含第一个字符串?
我目前有这个
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。
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 */
您需要 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);
您在末尾使用没有零的字符串。
选项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;