使用 memcpy 后无法打印指针
Unable to print a pointer after using memcpy
我正在尝试让我自己的 memcpy 版本将字符数组从一个指针复制到另一个指针。但是,这会产生错误。 printf 好像有问题。
其次,官方的memcpy函数return是目标指针。真的需要吗?如果我修改*dest,它应该反映在*d中。那么有什么必要return么?
#include <stdio.h>
void memcpy2(void *dest, const void *src, size_t n)
{
char *dp = dest;
const char *sp = src;
while (n--)
*dp++ = *sp++;
}
int main(void) {
char *c = "Hello";
char *d=NULL;
memcpy2(d,c,3);
printf( "%c", *d);
return 0;
}
您取消引用一个 NULL
指针,这是未定义的行为,您应该分配 space 并使用 d
指向它以使其工作,执行此操作,而不是
d = NULL
写入
d = malloc(3);
别忘了
free(d);
在 printf()
.
之后
如果你想自动使d
成为一个有效的指针,那么memcpy2()
这样写
void memcpy2(void **dest, const void *src, size_t n)
{
*dest = NULL;
if ((src == NULL) || (n == 0))
return;
*dest = malloc(n);
if (*dest == NULL)
return;
char *dp = *dest;
const char *sp = src;
while (n--)
*dp++ = *sp++;
}
然后你的主要是
int main(void) {
char *c = "Hello";
char *d = NULL;
memcpy2(&d, c, 3);
/* ^ pass the address of the pointer, so you can change where it points to */
if (d != NULL) /* prevent NULL dereference. */
{
printf("%c", *d);
free(d);
}
return 0;
}
我正在尝试让我自己的 memcpy 版本将字符数组从一个指针复制到另一个指针。但是,这会产生错误。 printf 好像有问题。
其次,官方的memcpy函数return是目标指针。真的需要吗?如果我修改*dest,它应该反映在*d中。那么有什么必要return么?
#include <stdio.h>
void memcpy2(void *dest, const void *src, size_t n)
{
char *dp = dest;
const char *sp = src;
while (n--)
*dp++ = *sp++;
}
int main(void) {
char *c = "Hello";
char *d=NULL;
memcpy2(d,c,3);
printf( "%c", *d);
return 0;
}
您取消引用一个 NULL
指针,这是未定义的行为,您应该分配 space 并使用 d
指向它以使其工作,执行此操作,而不是
d = NULL
写入
d = malloc(3);
别忘了
free(d);
在 printf()
.
如果你想自动使d
成为一个有效的指针,那么memcpy2()
这样写
void memcpy2(void **dest, const void *src, size_t n)
{
*dest = NULL;
if ((src == NULL) || (n == 0))
return;
*dest = malloc(n);
if (*dest == NULL)
return;
char *dp = *dest;
const char *sp = src;
while (n--)
*dp++ = *sp++;
}
然后你的主要是
int main(void) {
char *c = "Hello";
char *d = NULL;
memcpy2(&d, c, 3);
/* ^ pass the address of the pointer, so you can change where it points to */
if (d != NULL) /* prevent NULL dereference. */
{
printf("%c", *d);
free(d);
}
return 0;
}