⑴ 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 ,但没给他赋值 所以他就没有长度 追问: 哦 好吧!!嘿嘿!!谢谢啦!!知道啦!! 回答: 速度选个满意呗