C中的字符串连接

时间:2011-09-14 18:58:05

标签: c string concatenation

char *str1 = malloc(256*sizeof(char));
char *str2 = "stack"
for (i=0;i<15;i++){
     sprintf(str1,"%s%s",str1,str2);
} 
printf("%s\n",str1);

我试图在每次循环计数时将str2连接到str1。但是这段代码可以运行,但很容易 什么是连接它们的最好方法?

4 个答案:

答案 0 :(得分:4)

根据CERT安全编码指南,您需要use pointers to const when referring to string literals

因此,char *str2 = "stack"必须为const char *str2 = "stack";

这将使其不可变。

此外,您正在使用deprecated/obsolete functions。您应该使用的安全功能是strcat_s。例如,

合规示例

enum { BUFFERSIZE=256 };

void complain(const char *msg) {
  static const char prefix[] = "Error: ";
  static const char suffix[] = "\n";
  char buf[BUFFERSIZE];

  strcpy_s(buf, BUFFERSIZE, prefix);
  strcat_s(buf, BUFFERSIZE, msg);
  strcat_s(buf, BUFFERSIZE, suffix);
  fputs(buf, stderr);
}

请在此处阅读strcpy_s() and strcat_s()

答案 1 :(得分:0)

字符串连接的标准C函数是char * strncat ( char * destination, char * source, size_t num );

答案 2 :(得分:0)

如果你想使用sprintf;像这样的东西:

char *str1 = malloc(256*sizeof(char));
char *str2 = "stack";
*str1 = '\0';
for (i=0;i<15;i++){
    snprintf(str1 + strlen(str1), 256 - strlen(str1), "%s", str2);
} 
printf("%s\n",str1);

答案 3 :(得分:-1)

使用strncat

char *str1 = malloc(256*sizeof(char));
str1[0] = '\0';
char *str2 = "stack"
for (i=0;i<15;i++){
     strncat(str1, str2, 256 - 1 - strlen(str2));
} 
printf("%s\n",str1);