为什么strcat不能在C中使用空字符串?

为什么strcat不能在C中使用空字符串?,c,printf,strcat,C,Printf,Strcat,这是我的节目:- #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

这是我的节目:-

#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;
}

为什么strcat第一次不工作,但从第二次开始工作正常?

此语句完全覆盖了第一个strcat:

sprintf(arrcTest,"%s","World");

sprintf
strcat
不同
sprintf
格式化字符串并将其放在缓冲区的开头<另一方面,code>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 */

第一个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;
}


这是因为
sprintf(arrcTest,“%s”,“World”)覆盖
arrcTest
。您通过
sprintf(arrcTest,“%s”,“World”)重写了
Hello
。建议不要使用sprintf。使用snprintf、sprintf_s或同等工具,以防止意外溢出缓冲区。@如果可用,应使用skimon snprintf代替sprintf_s(后者不是标准的)。
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;
}