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。但是这段代码可以运行,但很容易 什么是连接它们的最好方法?
答案 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);