2013-11-28 71 views
-3

我有2個結構。memcpy問題(內部結構)

​​

的結構A被填充在某處,我想*緩衝液中的內容複製到消息[100](在結構B)。

我試圖做到這一點:

memcpy(B.Message, A.Buffer, A.Len); 

我使用Visual C++編譯器和它說:

沒有可用於當前位置沒有源代碼。

然後:

訪問衝突讀取位置00000000。

有人可以幫助我嗎?

+1

爲什麼你全部大寫的類型?我們是否應該假設它們與標準類型相同? – unwind

+1

爲什麼你不顯示一個完整的程序來演示錯誤?我猜可以在20行代碼中完成。那麼我們就不必猜測你的代碼是什麼樣子了。 –

回答

2

確保您從中複製的A確實有效。它看起來好像是一個NULL指針。

1

的代碼這部分回答您的問題(編輯,以說明在您的評論匹配):

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct A { 
    int Len; 
    void *Buffer; 
} A; 

typedef struct B { 
    int MyVar; 
    int Length; 
    char Message[100]; 
} B; 


void mycopy(A source) 
{ 
    printf("Content: %s\n", (char*)source.Buffer); 
    B test; 
    memcpy(test.Message, source.Buffer, strlen(source.Buffer)*sizeof(char)); 
    printf("Message is: \"%s\"!\n", test.Message); 
} 


int main(void) 
{ 
    A mymessage; 
    mymessage.Buffer = malloc(40*sizeof(char)); 
    strcpy(mymessage.Buffer,"Hello world"); 
    mycopy(mymessage); 
    return 0; 
} 

在您發佈您使用了結構的定義代碼的memcpy( BA),儘管您必須創建結構的實例變量才能開始。

你應該已經張貼你有什麼話對的memcpy之前完成,因爲從你寫什麼,我們假設你有沒有實例化的兩個結構,因爲我已經做在這裏:

A mymessage; 
B test; 
+0

我已經定義了結構的變量,但沒有在我的原始文章中發佈它們。順便說一句,我正在從main()將A的已填充結構變量傳遞給我的函數,我使用相同類型的對象接收它並執行上述操作。結構B的對象也已經在我用來填充的函數中創建。我嘗試使用你提供的memcpy()格式,並且仍然遇到同樣的問題。它說:「當前位置沒有可用的源代碼。」 – aod

+0

然後請繼續前進,並添加到你的問題,你如何instanciating'一個varA;'到主函數,以及如何將它傳遞給另一個函數(發佈函數的原型以及)。總而言之,發佈更多的代碼,以便能夠幫助你。 – Chris

+0

@anikondemand:我忘了提及你上面的評論,我也更新了代碼以匹配你上面發佈的描述。它仍然有效。 – Chris