c - 将 char* 传递给结合 memcpy 的函数

标签 c char stack parameter-passing

通常是一个基本问题,但也许我太笨了。我尝试传递 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/

相关文章:

c++ - 堆栈 C++ 的打印函数

integer - 在 Arduino 中串行发送一个整数

c - 在考虑使用 switch 和 while 循环来添加句子和其中的字符时陷入困境

c - 数组c编程绝对值?

c - 将代码与 `floor();` 、 `ceil();` 和 `pow();` 链接时出错

c++ - 为什么输出会跳过 gets(&char*) 的语句

c++ - 从 DLL 获取 char *

c - 如何显式压入/弹出到 C 返回堆栈?

VBA 系统.集合.队列

c - 使用 sscanf() 在分隔符之间跳过字符串