c - memcpy 将数组对象复制到 C 中的字符指针,反之亦然

标签 c arrays pointers memory memcpy

我试图通过函数将字符从数组复制到字符指针。以下是我的代码:

#include<stdio.h>
void pass(void* arg){
    char arr[1];
    arr[0]='X';
    memcpy((char *)arg,arr,1);
}

void main(){
    char *buf=malloc(sizeof(char));
    pass(buf);
    printf("%c",buf);
    free(buf);
}

在这里,指针 buf 打印出一个垃圾值。我尝试了上述程序的反向操作,如下所示:

#include<stdio.h>
void pass(void* arg){
    char arr[1];
    memcpy(arr,(char *)arg,1);
    printf("%c",arr[0]);
}

void main(){
    char *buf=malloc(sizeof(char));
    buf[0]='X';
    pass(buf);
    free(buf);
}

这是成功的,arr[0] 将值打印为 X。 有人可以澄清为什么第一个案例失败了吗?

最佳答案

您必须打印 *bufbuf[0] 而不是 buf 来打印 指向的数组的第一个元素>buf.

另请注意,传递类型为 char* 的数据将通过 printf() 中的 %c 打印,它期望数据类型为 int,由于类型不匹配,是未定义的行为

试试这个:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void pass(void* arg){
  char arr[1];
  arr[0]='X';
  memcpy((char *)arg,arr,1);
}
int main(void){
  char *buf=malloc(sizeof(char));
  pass(buf);
  printf("%c",buf[0]);
  free(buf);
  return 0;
}

关于c - memcpy 将数组对象复制到 C 中的字符指针,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248241/

相关文章:

c - 与 strcpy 一起使用时出现段错误(核心转储)

c - 搜索 char** 类型的字符串

c++ - 通过 (char* bar) 和 (char are[ ]) 传递 char 数组是否相同? C++

检查指针是否分配内存

不明白为什么我不能循环 %[^/n]

C 从命令行读入数学方程式

Python:获取分割图中每个簇的边界框坐标(2D numpy 数组)

javascript - 比较两个数组并在正则表达式后返回唯一值

c - malloc 不断返回相同的地址

c++ - 指向实例类类变量的指针?