这是我的计划: -
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char arrcTest[256] = {0};
strcat(arrcTest,"Hello");
sprintf(arrcTest,"%s","World");
strcat(arrcTest,"!!");
printf("The String is=> %s\n",arrcTest);
return 0;
}
我用gcc版本4.8.3编译它并得到以下输出: -
The String is=> World!!
为什么strcat第一次没有工作,但从第二次开始它正常工作?
答案 0 :(得分:3)
这句话完全覆盖了第一个strcat:
sprintf(arrcTest,"%s","World");
答案 1 :(得分:1)
sprintf
与strcat
不同。 sprintf
格式化字符串并将其放在缓冲区的开头。另一方面,strcat
将字符串追加到缓冲区的末尾。
strcat(arrcTest,"Hello"); /* after this statement you have "Hello" in arrcTest */
sprintf(arrcTest,"%s","World"); /* after this statement you have "World" in arrcTest */
strcat(arrcTest,"!!"); /* after this statement you have "World!!" in arrcTest */
答案 2 :(得分:1)
第一个strcat正在运行。只有你在下一个声明中覆盖了它
sprintf(arrcTest,"%s","World");
如果您不希望strcat的第一个结果被覆盖,那么您可以编写
sprintf( arrcTest + strlen( arrcTest )," %s","World");
其他方法是
int main(void)
{
char arrcTest[256] = {0};
strcat(arrcTest,"Hello");
strcat(arrcTest, " World");
strcat(arrcTest,"!!");
printf("The String is=> %s\n",arrcTest);
return 0;
}
或
int main(void)
{
char arrcTest[256] = {0};
sprintf(arrcTest,"%s %s%s", "Hello", "World", "!!" );
printf("The String is=> %s\n",arrcTest);
return 0;
}