當前位置:首頁 » 編程語言 » c語言任意長度數組
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言任意長度數組

發布時間: 2022-06-12 03:54:53

c語言如何輸入任意長度的字元串數組

「任意長度」實際上是做不到的,即使所用的軟體平台沒有限制,硬體環境也不允許。所以「任意長度」應當理解為在一個很大的空間之內沒有限制地輸入字元串而不用事先確定長度。鑒於這種理解,可以定義一個輸入函數,先動態申請一個較大的空間,直接向其內輸入字元串;輸入完畢後檢測其長度,再按實際需要申請一個合適大小的空間,把剛才輸入的字元串拷貝到這個合適大小的空間里,再把原先申請的大空間釋放。舉例代碼如下:

//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#defineN131071
char*Any_Long_Str(char*p){
char*pt;
if((pt=(char*)malloc(N))==NULL){//
printf("... ");
exit(0);
}
gets(pt);//Getastringfromthekeyboard
if((p=(char*)malloc(strlen(pt)+1))==NULL){//Applyforasuitablesizeofspace
printf("Applicationmemoryfailure... ");
exit(0);
}
strcpy(p,pt);//Copythestringpttop
free(pt);//Releasethetemporaryuseofspace
returnp;
}
intmain(void){
char*pstr=NULL;
printf("Inputastring: ");
pstr=Any_Long_Str(pstr);
printf("%s ",pstr);//Lookat...
free(pstr);//Releasethespace
return0;
}

Ⅱ C語言能不能輸入隨意長的數組

在c語言中,所謂的「清空」,意思是「無視裡面的數據」,而不是「讓裡面沒有數據」。
有時候可能需要把一個數組清零,意思是全部數據都用0填充,可以用庫函數來實現。假設數組名為a,無論什麼類型也無論幾維都一樣,可以寫成memset(a,0,sizeof(a));

Ⅲ C語言怎麼自定義數組長度。

動態分配的數組可以自定義數組的長度,示例如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
printf("輸入要分配的內存大小:");
int size;
scanf("%d", &size); //輸入自定義的數組長度
int *pstart = (int *)malloc(sizeof(int) *size);
if (pstart==0) {
printf("不能分配內存\n");
return 0;
}
memset(pstart, 0x00, sizeof(int) * size);
int inx;
for (inx=0; inx!=size; ++inx) pstart[inx] = inx;
for (inx=0; inx!=size; ++inx) printf("%d\t", pstart[inx]);
printf("\n");
return 0;
}

Ⅳ c語言怎麼獲取數組的長度

c語言中,定義數組後可以用sizeof命令獲得數組的長度(可容納元素個數)

如:

{
intdata[4];
intlength;
length=sizeof(data)/sizeof(data[0]);//數組占內存總空間,除以單個元素占內存空間大小
printf("lengthofdata[4]=%d",length);//輸出lengthofdata[4]=4
}

但,通過傳遞數組名參數到子函數中,以獲得數組長度是不可行的。如:

intgetLength(int[]a){
intlength;
length=sizeof(a)/sizeof(a[0]);//這樣是錯誤的,得到的結果永遠是1
returnlength;
}
因為,a是函數參數,到了本函數中,a只是一個指針(地址,系統在本函數運行時,是不知道a所表示的地址有多大的數據存儲空間,這里只是告訴函數:一個數據存儲空間首地址),所以,sizoef(a)的結果是指針變數a占內存的大小,一般在32位機上是4個位元組。a[0]是int類型,sizeof(a[0])也是4個位元組,所以,結果永遠是1。

因此,獲得數組長度,只能在數組定義所在的代碼區中,採用以上方法,才可以達到效果。

拓展資料:

數組特點:

  1. 數組是相同數據類型的元素的集合。

  2. 數組中的各元素的存儲是有先後順序的,它們在內存中按照這個先後順序連續存放在一起。

  3. 數組元素用整個數組的名字和它自己在數組中的順序位置來表示。例如,a[0]表示名字為a的數組中的第一個元素,a[1]代表數組a的第二個元素,以此類推。

對於VB的數組,表示數組元素時應注意:

  1. 下標要緊跟在數組名後,而且用圓括弧括起來(不能用其他括弧)。

  2. 下標可以是常量,變數,或表達式,但其值必須是整數(如果是小數將四捨五入為整數)。

  3. 下標必須為一段連續的整數,其最小值成為下界,其最大值成為上界。不加說明時下界值默認為1。

Ⅳ c語言怎麼輸入任意長度的一個數組

首先 嚴格來說 不可能出現任意長度。 內存是有限的 超出一定長度後,不可能存的下,雖然這個值可能是超級大的,但總有限度。

其次,所謂的任意長度,其實就是可變長數組。
那麼,在事先不知道數組規模下,就要靠輸入,來確定數組大小了。
重點在於,要開辟多大的數組來存

一般有這么幾種情況
1 直接開一個足夠大的。 比如 雖然不知道有多大,但最大不超過1000個,那就可以直接開個1000元素的數組。
2 動態分配, 使用malloc動態分配內存。
當出現可能的不夠情況,用realloc重新分配。

Ⅵ 怎麼用C語言定義一個無限長的數組

C語言支持定義一個不顯式定義長度的數組,即通過初始化數據來分配數組長度。

比如int a[] = {1,2,3,4,5}; 數組a的長度沒有顯式給出,由於有5個初始化數據,所以分配空間長度為5個int型。

但是無論如何定義,數組的長度都是固定的,在定義的時候就已經分配好空間,從這個角度上C語言無法定義無限長的數組。但很多實際應用中又事先無法確定數組的長度,對於這類情況,一般有兩種方法可以使用。


1 由malloc和realloc兩個函數,分配動態空間,隨時按需改變數組的最大長度。

通過下面例子來理解該方法:

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

intmain()
{
intsize=100;//最初為100個元素空間。
int*a=NULL;
inti=0;

a=malloc(sizeof(int)*size);
if(a==NULL)return-1;
while(scanf("%d",a+i)==1)//循環向a中輸入數據,直到輸入非數值字元為止
{
i++;
if(i==size)//數組空間不足
{
size*=2;//將數組空間擴大二倍,也可以改用size+=100;之類的操作,使size每次增加固定值。
a=realloc(a,size);//分配新的空間
if(a==NULL)
{
return-1;//這種情況下運行載體(如PC)內存不足以提供,中斷程序。
}
}
}

if(a)free(a);//對申請的內存進行釋放。
return0;
}

從以上程序可以看到,這種方式的原理就是每當數組空間不足時,利用函數realloc分配一段新的內存空間以增大數組長度。 直到占滿所有剩餘空間。

如果到占滿所有空間還是無法存下數據,那麼是硬體無法支持了。

所以這種方法可以做到軟體意義上的無限大數組空間。


但是這種方法代碼量比較大,而且需要頻繁的進行內存的分配,如果實現知道數據的最大可能規模,那麼可以用另一個方法。


2 事先知道數據的最大規模,比如統計一個班的分數時,一個班最多不超過百人,那麼可以直接定義一個長度為100的數組,或者保險起見,定義一個長度為1000的數組,並對其操作。這樣在操作范圍內,這個就是一個「無限長」的數組了。

Ⅶ C語言怎麼定義一個二維數組可以使每行的輸入長度任意

1、使用動態數組可以實現變長度數組。建動態數組,其他就像數組一樣使用就行了。


2、常式:

introw=0;//函數
intcol=0;//列數
inti;
int**arr=NULL;//下面假設存儲的數據類型為int
printf(「請輸入二維數組的行數和列數:」);
scanf("%d%d",&row,&col);
//要不要加判斷輸入是否合法你自己決定,這里就不加,
arr=(int**)malloc(sizeof(int*)*row);//arr在這里可以看出成數組,數組的每個成員都是指向int類型的指針,這樣每個指針指向的代表一行,共row行
for(i=0;i<row;i++)//為每行申請空間
{
arr[i]=(int*)malloc(sizeof(int)*col);//每一行有col列
}

之後就可以用a[i][j]的形式訪問二維數組了

Ⅷ c語言中如何自定義數組長度

動態分配的數組可以自定義數組的長度,示例如下:
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
int
main()
{
printf("輸入要分配的內存大小:");
int
size;
scanf("%d",
&size);
//輸入自定義的數組長度
int
*pstart
=
(int
*)malloc(sizeof(int)
*size);
if
(pstart==0)
{
printf("不能分配內存\n");
return
0;
}
memset(pstart,
0x00,
sizeof(int)
*
size);
int
inx;
for
(inx=0;
inx!=size;
++inx)
pstart[inx]
=
inx;
for
(inx=0;
inx!=size;
++inx)
printf("%d\t",
pstart[inx]);
printf("\n");
return
0;
}

Ⅸ C語言中如何求任意一個int型數組的長度

即:int length(int ar[]);只給出數組首地址,返回該數組的長度
C語言中對數組的操作不太靈活,而數組操作又是不可或缺的,求大蝦解惑

Ⅹ C語言,對任意長度的數組進行冒泡排序,我的代碼哪裡有問題為什麼我輸入數組第一個元素,第一個數會沒

數據輸入方式錯誤,以一個整數緊接著一個回車結束輸入過程的初步解決方法參考如下:
將以上代碼5至8行替換為
char ch;
i=0;
while(1){
scanf("%d%c",&t,&ch);
a[i++]=t;
if(i>=100) break;//防止越界
if(ch=='\n') break;
}