c語言沒有直接讀取返回數組的函數。
臨河ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
看你問題里文件內容格式是:一行一個字符串回車換行。
那么,用fgets一次讀一行,你寫循環(huán)調用這個fgets函數把讀取的值放在數組里。
至于你說的數組長度寬度不定,在c里需用malloc動態(tài)申請內存。
方法1:用fseek和ftell獲取整個文件字節(jié)數,然后用malloc申請一個整個文件大小的內存地址(二維數組在內存中就是一維)。然后在循環(huán)中每次讀取一行到這個地址并計算一行長度,利用指針移得到每行首地址,最后所有行指針組成二維數組(行數也是動態(tài)申請)
方法2:你定義一個比較大的字符數組,作為零時存儲變量,每次循環(huán)中讀取一行到這個數組,再用strlen計算字符串長度,再用malloc按照這個長度申請一組地址(一行),并利用strcpy轉移內容,最后組成二維數組。
方法3:直接用malloc申請很大的二維數組,循環(huán)讀取獲取內容后,strlen獲取每行實際內容的長度。最后用realloc根據實際寬度和行數修改數組大小。
#includestdio.h
#includestring.h
void main()
{
char s[]= "123456789", a[]= "012345678";
printf("數組 s 長度為:%d\n", strlen(s));
if(strcmp(s, a)0)
printf("數組 s 數組 a");
else if(strcmp(s, a)==0)
printf("數組 s=數組 a");
if(strcmp(s, a)0)
printf("數組 s 數組 a");
printf("\n");
}
用 sizeof 可以獲得數據類型或變量在內存中所占的字節(jié)數。同樣,用 sizeof 也可以獲得整個數組在內存中所占的字節(jié)數。因為數組中每個元素的類型都是一樣的,在內存中所占的字節(jié)數都是相同的,所以總的字節(jié)數除以一個元素所占的字節(jié)數就是數組的長度。
比較特別的是,比特右移()運算符可以是算術(左端補最高有效位)或是邏輯(左端補0)位移。例如,將11100011右移3比特,算術右移后成為11111100,邏輯右移則為00011100。
運算符的優(yōu)先級從高到低大致是:單目運算符、算術運算符、關系運算符、邏輯運算符、條件運算符、賦值運算符(=)和逗號運算符。
C語言特點:
其一,廣泛性。C語言的運算范圍的大小直接決定了其優(yōu)劣性。C語言中包含了34種運算符,因此運算范圍要超出許多其它語言,此外其運算結果的表達形式也十分豐富。
其二,簡潔性。9類控制語句和32個關鍵字是C語言所具有的基礎特性,使得其在計算機應用程序編寫中具有廣泛的適用性,不僅可以適用廣大編程人員的操作,提高其工作效率,同時還能夠支持高級編程,避免了語言切換的繁瑣。
C/C++不能直接返回一個數組。這是由于在C/C++中,數組不是一種類型,因此不能被直接返回。 在C/C++中,一般有兩種方法來返回一個數組。 第一種方法: 返回一個指向數組的指針,例如char (*retArray)[10]聲明了一個函數retArray,該函數可以返回指向具有10個char元素的數組例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*動態(tài)開辟空間*/ a=calloc(10,sizeof(int));/*賦值*/for(i=0;i10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10]; /*函數返回指向數組的指針*/ b=retArray(); /*打印第一個元素*/ printf("%d/n",(*b)[0]); /*釋放空間*/free(b);return 0;}第二種方法: 如果你不喜歡用指針的形式返回數組,那么可以采用返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指針而造成內存泄露,也可以避免訪問懸掛指針造成的錯誤。但缺點是由于結構是先拷貝再返回,因此如果結構較大時,會影響效率和占用較大內存。 例子如下:#includestruct tag{int a[10];}x,y;struct tag retArray(){int i=0;for(i=0;i10;i++) x.a[i]=i;return x;}int main(){struct tag y=retArray(); printf("%d/n",y.a[3]);return 0;}注意:(1)在返回指針時要切記要避免內存泄露和訪問懸掛指針。 (2)很多人認為指針和數組等價的,這是錯誤的。int (*a)[10]和int b[10]兩者是不能直接用a=b來賦值的。在數組和指針作為函數參數傳遞時,二者可以認為等價,這是因為數組會被轉化為指針來傳遞。 (3)返回多維數組方法類似。
收藏 C、C++中沒有提供 直接獲取數組長度的函數,對于存放字符串的字符數組提供了一個strlen函數獲取長度,那么對于其他類型的數組如何獲取他們的長度呢?其中一種方法是使 用sizeof(array) / sizeof(array[0]), 在C語言中習慣上在 使用時都把它定義成一個宏,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中則可以使用模板 技術定義一個函數,比如:template class Tint getArrayLen(T array){return (sizeof(array) / sizeof(array[0]));}這樣對于不同類型的數 組都可以使用這個宏或者這個函數來獲取數組的長度了。以下是兩個Demo程序,一個C語言的,一個C++的:P.S:若數組為存儲 字符串的字符數組,則所求得的長度還需要減一,即對于宏定義: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]) - 1 );} ,對于函數定義:template class Tint getArrayLen(T array){return (sizeof(array) / sizeof(array[0]) - 1);}原因為存儲字符串的字 符數組末尾有一個'\0'字符,需要去掉它?!綜語言】#include stdio.h#include stdlib.h#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}//定義一個帶參數的 宏,將數組長度存儲在變量len中int main(){char a[] = {'1','2','3','4'};int len;GET_ARRAY_LEN(a,len)//調用預定義的宏,取得數組a的長度,并將其存儲在變量len中printf("%d
",len);system("pause");return 0;}【C++】#include iostreamusing namespace std;template class Tint getArrayLen(T array){//使用模板定義一 個函數getArrayLen,該函數將返回數組array的長度return (sizeof(array) / sizeof(array[0]));}int main(){char a[] = {'1','2','3'};cout getArrayLen(a) endl;return 0;}
在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。
在大多數情況下,一維數組和一維指針是可以通用的。
比如,定義一個函數,申請一定長度的整型動態(tài)數組,其長度用參數傳入,并將結果返回。如出錯,返回空指針NULL。 代碼可以寫成如下形式:
int?*int_array_create(int?n)//參數n為數組元素個數
{
int?*r;?
if(n=0)?return?NULL;//參數錯誤
r?=?(int?*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
return?r;//返回得到的整型數組的指針。?
}
文章名稱:c語言返回數組長度的函數 c語言獲取數組長度的函數
當前路徑:http://jinyejixie.com/article0/dodopio.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供商城網站、手機網站建設、做網站、關鍵詞優(yōu)化、云服務器、網站排名
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)