繁体   English   中英

为什么strcat无法在C中使用空字符串?

[英]Why does strcat not work with empty string in C?

这是我的程序:

#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第一次不工作,但是从第二次开始就正常工作?

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

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

sprintfstrcat 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 */

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM