⑴ C 如何定義一個未知長度的數組
定義一個未知長度的數組的方法:
一是用VLA可變長數組,例如:
int i = 10, j = 20;
double a[i][j]; //定義VLA
VLA要c99才開始支持,需要使用c99編譯器,例如gcc
二是使用動態數組,例如:
int m = 10, n = 20;
.........
double **p = ( double** )malloc( 10 * sizeof( double* ) );
for( i = 0; i < 20; ++i )
p[i] = ( double* )malloc( 20 * sizeof( double ) );
..........
p[5][6] = 20.68;
⑵ 在c語言中如何輸入長度不確定的字元串
你可以這樣做:
//文件名: array01.cpp
#include<iostream>
using namespace std;
int main()
{
int len;
cin>>len;
//用指針p指向new動態分配的長度為len*sizeof(int)的內存空間
int *p=new int[len];
...........
delete[] p;
return 0;
}
注意int *p=new int[len];這一句,你不能這樣做:
int p[len];
C++編譯器會報錯說len的大小不能確定,因為用這種形式聲明數組,數組的大小需要在編譯時確定。而且這樣也不行:
int p[]=new int[len];
編譯器會說不能把int*型轉化為int[]型,因為用new開辟了一段內存空間後會返回這段內存的首地址,所以要把這個地址賦給一個指針,所以要用int *p=new int[len];
array01.cpp實現了一個變長的一維數組,但是要養成一個好習慣,就是注意要注銷指針p,使程序釋放用new開辟的內存空間。
不過,如果你能夠知道字元串的最大長度的話,最簡單的辦法就是直接將數組定義為最大長度。
⑶ C語言如何定於未知長度的字元串
用動態申請內存的方法可以解決這個問題,有兩種措施可以考慮:
設置一個循環,先動態申請一個較小的空間比如10位元組,然後輸入字元;當輸入滿時另外申請一個20位元組的空間,把已輸入的10個字元拷貝過來,釋放掉10個位元組的空間。然後向20個位元組的空間里接著輸入字元,寫滿時再申請一個30字元的空間……如此反復,直到輸入' '時結束。
先動態申請一個較大的空間,如65535位元組,直接向里輸入字元,輸入結束後測出長度,按實際需要另外申請一個空間把字元串拷貝過來,釋放原來的空間。
措施1比較切合題意,但時效差,空間也不省(最後一瞬需要近二倍的空間)。措施2顯得更有實際意義,因為「無限」的長度肯定是不存在的,所以取一個「夠用」的大小臨時用一下是可取的。下面提供措施2的參考代碼:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#defineN65535
char*mygets(char*p){
char*ptmp;
if((ptmp=(char*)malloc(N))==NULL){//申請一個較大的臨時用空間
printf("Applicationmemoryfailure... ");
exit(0);
}
gets(ptmp);//向臨時空間直接輸入字元串
if((p=(char*)malloc(strlen(ptmp)+1))==NULL){//按實際需要申請空間
printf("Applicationmemoryfailure... ");
exit(0);
}
strcpy(p,ptmp);//把字元串拷貝所需大小的空間里
free(ptmp);//釋放臨時空間
returnp;
}
intmain(void){
char*str=NULL;
printf("Inputastring... str=");
str=mygets(str);
printf("%s ",str);
free(str);
return0;
}
⑷ c語言中怎樣定義一個未知長度的數組
設置值等於null就行了 追問: 給個例子白?? 小弟 是自學的!悟性低啦??謝謝!! 回答: int[] a=null; 就是把 數組 a的值設置為空。所以系統沒有為他分配內存,等你給數組a賦值的時候 系統會自動給他分配相應的內存 追問: 我在手機上的搜索貌似說的是用到 鏈表 和指針神魔的??但是找不到啦!!麻煩您能幫忙給個例子不??謝謝!! 回答: 鏈表 指針 需要用這么麻煩嗎。 我從沒這樣弄過。 你需要的是一個未知長度的 數組 ,所以不給這個數組賦值就是最好的。 比如int[] a; 這就是申明一個 數組變數 a ,但沒給他賦值 所以他就沒有長度 追問: 哦 好吧!!嘿嘿!!謝謝啦!!知道啦!! 回答: 速度選個滿意唄