簡體   English   中英

memcpy將數組對象復制到C中的字符指針,反之亦然

[英]memcpy copies array object to character pointer in C but not vice versa

我正在嘗試通過函數將字符從數組復制到字符指針。 以下是我的代碼:

#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

還應注意,由於類型不匹配,傳遞的數據將通過printf() %c打印具有char*類型的數據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;
}

您的問題出在這里:

char *buf=malloc(sizeof(char));
:
printf("%c",buf);

因為buf指向字符而不是字符的指針 字符*bufbuf[0]因此您可以使用以下命令對其進行修復:

printf ("%c", *buf);

arr memcpy ,在第一個示例中,只要您可以做,就完全沒有必要創建arr並調用memcpy

void pass (void* arg) {
    ((char*)arg)[0] = 'X';
}

當您可以用以下簡單的方式替換malloc行時,在這種情況下也無需為字符動態分配內存:

char buf[1];

(當然也要擺脫free電話)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM