我有2個結構。memcpy問題(內部結構)
的結構A被填充在某處,我想*緩衝液中的內容複製到消息[100](在結構B)。
我試圖做到這一點:
memcpy(B.Message, A.Buffer, A.Len);
我使用Visual C++編譯器和它說:
沒有可用於當前位置沒有源代碼。
然後:
訪問衝突讀取位置00000000。
有人可以幫助我嗎?
我有2個結構。memcpy問題(內部結構)
的結構A被填充在某處,我想*緩衝液中的內容複製到消息[100](在結構B)。
我試圖做到這一點:
memcpy(B.Message, A.Buffer, A.Len);
我使用Visual C++編譯器和它說:
沒有可用於當前位置沒有源代碼。
然後:
訪問衝突讀取位置00000000。
有人可以幫助我嗎?
確保您從中複製的A
確實有效。它看起來好像是一個NULL指針。
的代碼這部分回答您的問題(編輯,以說明在您的評論匹配):
#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( B
和A
),儘管您必須創建結構的實例變量才能開始。
你應該已經張貼你有什麼話對的memcpy之前完成,因爲從你寫什麼,我們假設你有沒有實例化的兩個結構,因爲我已經做在這裏:
A mymessage;
B test;
我已經定義了結構的變量,但沒有在我的原始文章中發佈它們。順便說一句,我正在從main()將A的已填充結構變量傳遞給我的函數,我使用相同類型的對象接收它並執行上述操作。結構B的對象也已經在我用來填充的函數中創建。我嘗試使用你提供的memcpy()格式,並且仍然遇到同樣的問題。它說:「當前位置沒有可用的源代碼。」 – aod
然後請繼續前進,並添加到你的問題,你如何instanciating'一個varA;'到主函數,以及如何將它傳遞給另一個函數(發佈函數的原型以及)。總而言之,發佈更多的代碼,以便能夠幫助你。 – Chris
@anikondemand:我忘了提及你上面的評論,我也更新了代碼以匹配你上面發佈的描述。它仍然有效。 – Chris
爲什麼你全部大寫的類型?我們是否應該假設它們與標準類型相同? – unwind
爲什麼你不顯示一個完整的程序來演示錯誤?我猜可以在20行代碼中完成。那麼我們就不必猜測你的代碼是什麼樣子了。 –