有没有办法可以创建两个字符串,而第二个字符串不包含第一个字符串?
我目前有这个
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。
答案 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;