将char *传递给与memcpy结合使用的函数

时间:2016-01-20 07:37:51

标签: c char stack parameter-passing

通常是一个基本问题,但也许我太愚蠢了。我尝试传递char *作为函数参数的输出。在函数内部,我创建了一个临时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)

1 个答案:

答案 0 :(得分:2)

你的第一个问题是你malloc两次,在功能之前和之中。电话外mallocmain的第二行)被泄露。

第二个问题(这告诉我你甚至没有编译代码)是你在定义它之前使用i