这个函数的目的是将一个字符串复制到一个“缓冲区”——本质上是另一个字符串。然而,这个问题似乎比实际的问题过于复杂。
"Copies at most n-1 characters of string in into the buffer pointed to by
out. If n is reached, returns -2. Otherwise, returns -1 for malformed
input and 0 upon successful completion."
这就是我所拥有的:
#include <stdio.h>
#include <assert.h>
int copyStringN(register char *in, register char *out, register int n){
//Declarations
int i; //Dummy index
if(!in || !out) return -1;
for(i=0; i<n; i++){
*out++ = *in++;
}
*out = '\0';
return 0;
}
int main(void){
//Declarations
char in[] = "I'm not trying to inject malicious code...\\x29A.";
const int N = sizeof(in);
char out[N];
int err;
//Main execution
printf("\nThis function will copy at most n-1 characters of string into\nthe buffer pointed to by out.\n\n");
err = copyStringN(in, out, N);
assert(!err);
printf("%s\n", out);
printf("\nPlease press enter to exit...");
getchar();
return 0;
}
建议使用这种一般形式,但它似乎比需要做的事情过于复杂。为什么会n
达到?执行应该在之前停止n
。此外,不会N = sizeof(in)
匹配原始字符串的长度?
就个人而言,我宁愿使用更接近的功能
int copyStringN(register char *in, register char *out)
{
if((!in || !out) && (sizeof(in)<=sizeof(out))) return -1;
else{
while(*t++ = *from++);
return 0;
}
}
int main(void){
//Declarations
char in[] = "I'm not trying to inject malicious code...\\x29A.";
const int N = sizeof(in);
char out[N];
int err;
.
.
.
我相信用更少的陈述会产生同样的效果。让我把这个问题变成一个问题,我如何编写一个函数,将字符串复制到另一个数组中,并在提示中定义保护?另外,我介绍的两个程序是否以我不认识的方式存在某种漏洞?
建设性的意见表示赞赏。