我试图通过函数将数组中的字符复制到字符指针。以下是我的代码:
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. 有人可以澄清为什么第一种情况会失败吗?
答案 0 :(得分:3)
您必须打印*buf
或buf[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}}行。