c語言結構體拷貝-九游会j9娱乐平台
⑴ c語言中結構體可以通過=號直接復制嗎
標準的c語言是不可以的,但是如果你的文件的擴展名是.cpp
這就沒問題了。
⑵ c語言 結構體的定義及使用
額·你的初始化有錯誤~~
yinkailin.name[] = "yinkailin";這樣初始化是不行滴~
加頭文件#include
然後這樣初始化~
strcpy(yinkailin.name, "yinkailin");
⑶ c語言如何實現結構體的深度復制
使用memcpy即可, 比如你另外建立一個結構體sortbook[1000]用來保存排序結果,將book中的第i個元素賦值到sortbook的第j個元素中
memcpy(&sortbook[j], &book[i], sizeof(struct book));
用這個函數需要#include
函數原型
void *memcpy(void*dest, const void *src, size_t n);
功能
由src指向地址為起始地址的連續n個位元組的數據復制到以destin指向地址為起始地址的空間內。
頭文件
#include
返回值
函數返回一個指向dest的指針。
說明
1.source和destin所指內存區域不能重疊,函數返回指向destin的指針。
2.與strcpy相比,memcpy並不是遇到'\0'就結束,而是一定會拷貝完n個位元組。
memcpy用來做內存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度;
例:
char a[100], b[50];
memcpy(b, a,sizeof(b)); //注意如用sizeof(a),會造成b的內存地址溢出。
strcpy就只能拷貝字元串了,它遇到'\0'就結束拷貝;例:
char a[100], b[50];
strcpy(a,b);
3.如果目標數組destin本身已有數據,執行memcpy()後,將覆蓋原有數據(最多覆蓋n)。如果要追加數據,則每次執行memcpy後,要將目標數組地址增加到你要追加數據的地址。
//注意,source和destin都不一定是數組,任意的可讀寫的空間均可。
⑷ c語言怎麼將結構體的內容復制到另一個結構體中
c並不支持結構體變數的直接賦值,
一般採用memcpy(&a,&b,sizeof(a))的方式
⑸ c語言strcpy將一個結構體的數據復制到另一個後,出問題了
這屬於c 的范疇,雖然我c 學得也是半斤八兩,但是這段代碼我還是基本上過得去。
我假設你是有一定的c編程基礎,所以就只回答你空間描述的不懂的地方了,每句都翻譯枯燥而且也會感覺不知所雲。還有什麼不懂的,歡迎提問,我有足夠的耐性和信心讓你搞明白,呵呵^!^
c 中主要是比c多了面向對象的概念。
#include <*****> 表示的是將*****頭文件包含進來
#include "*****" 功能一樣,只是他們索引文件的方式不一樣,初學者不必深究。
*****頭文件裡面定義了常用的一些預處理,結構體,類等等,可以方便大家直接使用不再定義他們。你可以搜索*****找到它打開看看裡面的內容,不要隨意修改他們哦,否則你以後寫程序要出問題的喲,呵呵。
using namespace std;
表示要用到的一些關鍵字所在的命名空間
因為用到了cout所以必須加上這句話。
定義了一個student類,定義類的時候除了可以定義一些變數,還可以定義一些介面,變數和介面都可以用private,public,protected來定義訪問 以及 繼承許可權的。
其實介面更直接一點就是一個函數,或者說成指向函數的指針變數也可以,主要看你怎麼理解了。
int student::jud() ::表示域限定符,用::定義了一個介面(也就是函數),表示這個函數是屬於student類的。
同時student類中還定義了一個student()函數,是構造函數,語法規定必須和類名字相同。構造函數的主要作用是類實例化的時候初始化變數,也就是在創建對象的要用到的。
loop: printf("****");
loop:表示的是一個標號,後面用goto loop 跳轉到loop:位置執行printf("****");
你完全可以把loop替換成別的東西,比如xunhuan,呵呵
cout 用來控制輸出
<<連接各個參數,
cint 用來控制輸入
>>連接各個參數。參數和printf ,scanf 是相一致的。
system("***"); 可以調用一些命令行,如cls 清屏 ,pause 暫停 還可以創建進程等等。
好像差不多沒了,其他東西基本都是c語言知識了
ps:
其實c 的類和c語言的結構體非常相似,類可以定義函數介面,但是結構體不行
其實我們在結構體中也可以變相的實現定義函數的嘛,比如定義一個函數指針變數。
唯一不同的就是c 的類多了繼承的概念,一個類可以繼承另一個類的一些屬性
而且在繼承的過程中還有private,public,protected等許可權。
當然c 除了類之外還有stl等一些比較高級的東東值得學習,巧妙的使用他們可以加快項目進度,提升項目效率,c 真的是很好很強大。
⑹ c語言如何深拷貝結構體
結構體並非一個賦值號就能的,需要手動設計自己將其中的每個基礎類型進行復制:
struct a a1,a2;
strcpy(a1.str,"123456789"); strcpy(a2.str,a1.str); strcpy(a1.str,"111111111");
在中間那句執行時,a1.str的內容是"123456789",因此賦值給a2.str的也是這個字元串
賦值完成後再改變a1時,a2與此無關了,會保持最後一次操作賦值的結果。
⑺ c語言中,將多個結構體數據寫到一個文件中,應該如何讀取
c語言把一個結構體數組寫入文件分三步:
1、以二進制寫方式(wb)打開文件
2、調用寫入函數fwrite()將結構體數據寫入文件
3、關閉文件指針
相應的,讀文件也要與之匹配:
1、以二進制讀方式(rb)打開文件
2、調用讀文件函數fread()讀取文件中的數據到結構體變數
3、關閉文件指針
參考代碼如下:
#include
structstu{
charname[30];
intage;
doublescore;
};
intread_file();
intwrite_file();
intmain()
{
if(write_file()<0)//將結構體數據寫入文件
return-1;
read_file();//讀文件,並顯示數據
return0;
}
intwrite_file()
{
file*fp=null;
structstustudent={"zhangsan",18,99.5};
fp=fopen("stu.dat","wb");//b表示以二進制方式打開文件
if(fp==null)//打開文件失敗,返回錯誤信息
{
printf("openfileforwriteerror ");
return-1;
}
fwrite(&student,sizeof(structstu),1,fp);//向文件中寫入數據
fclose(fp);//關閉文件
return0;
}
intread_file()
{
file*fp=null;
structstustudent;
fp=fopen("stu.dat","rb");//b表示以二進制方式打開文件
if(fp==null)//打開文件失敗,返回錯誤信息
{
printf("openfileforreaderror ");
return-1;
}
fread(&student,sizeof(structstu),1,fp);//讀文件中數據到結構體
printf("name="%s"age=%dscore=%.2lf ",student.name,student.age,student.score);//顯示結構體中的數據
fclose(fp);//關閉文件
return0;
}