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

时间:2015-12-13 05:18:41

标签: c arrays pointers memory memcpy

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

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Player cannot be resolved to a type
    Player cannot be resolved to a type

    at Sound.main(Sound.java:9)

这里,指针 buf 打印垃圾值。我尝试了上述程序的反向如下:

#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);
}

这是成功的, arr [0] 将值打印为X. 有人可以澄清为什么第一种情况会失败吗?

2 个答案:

答案 0 :(得分:3)

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

另请注意,传递char*类型%c的数据,通过printf() 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; } 未定义的行为由于类型不匹配。

试试这个:

$('.add'+n).click(function(){

});

答案 1 :(得分:3)

你的问题在于:

buf

因为*buf是字符的指针,而不是字符。 字符buf[0]printf ("%c", *buf); ,因此您可以通过以下方式修复:

arr

顺便说一下,在第一个示例中,只需要创建memcpy并调用void pass (void* arg) { ((char*)arg)[0] = 'X'; } 完全

malloc

在这种情况下,当您只需用简单的char buf[1]; 行替换时,也不需要为字符分配动态内存:

free

(当然,摆脱{{1}}行。