我试图通过函数将字符从数组复制到字符指针。以下是我的代码:
#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。 有人可以澄清为什么第一个案例失败了吗?
最佳答案
您必须打印 *buf
或 buf[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/