通常是一个基本问题,但也许我太笨了。我尝试传递 char *
作为输出trought函数的参数。在函数内部我创建了一个临时的 char *
我想要 memcpy
到我传递的地址。这是代码:
#define BLOCKSIZE=1024
int myFunction(char *s, char **out) {
int i = strlen(s);
*out = (char *)malloc(BLOCKSIZE);
char tmp[BLOCKSIZE];
strcpy(tmp, s);
tmp[++i] = 0x0f;
for(int i=strlen(s);i < BLOCKSIZE; i++) {
tmp[i] = 0xcc;
}
memcpy(*out, tmp, BLOCKSIZE);
return 0;
}
int main() {
char *s = "Hello World";
char *o = (char *)malloc(BLOCKSIZE);
myFunction(s, &o);
}
问题是,跳出函数后堆栈被破坏myFunction
..
还有其他方法吗?
提前致谢!
最好的,
更新:问题已解决
for 循环部分 i < BLOCKSIZE
必须改为 i < (BLOCKSIZE - 1)
.
最佳答案
您的第一个问题是您在函数之前和函数中 malloc
两次。调用外的malloc
(main
的第二行)被泄露。
第二个问题(这告诉我你甚至没有编译代码)是你在定义它之前使用了 i
。
关于c - 将 char* 传递给结合 memcpy 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894097/