① c语言怎么实现可变长度字符串
C语言实现可变长度字符串,主要依靠realloc函数实现,主要代码如下,
//程序功能,判断插入字符长度len,若大于预设大小n,调整字符串数组大小,实现动态处理数组大小。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char * pstr = NULL;
int n=10;//字符串初始大小
char str[100];//待插入字符串
int len=0;//待插入字符串长度
pstr = (char*)malloc(sizeof(char)*n);//申请sizeof(char)*n个大小的内存空间
if (pstr==NULL)
{
printf("内存申请出错,程序退出!\n");
exit(1);
}
memset(pstr,'\0',sizeof(char)*n);//初始化内存空间
printf("输入待插入字符串:\n");
gets(str);
len=strlen(str)+1;
printf("内存申请出错,程序退出!%d\n",len);
if(len>n)//字符串长度大于初始大小n,重新申请内存空间
pstr=(char *)realloc(pstr,sizeof(char)*len);//重新申请内存空间
strcat(pstr,str);//将插入字符串连接给pstr
puts(pstr);
if (pstr==NULL)//清理申请内存
{
free(pstr);
pstr=NULL;
}
return 0;
}
void *realloc( void *ptr, size_t size );函数将ptr指向的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸(需要注意的是原始数据会丢失)都可以。返回值是指向新空间的指针,如果错误发生返回NULL。
② c语言中数组长度怎么设置
定义数组时在中括号内写上代表长度的数字,定义一维数组和二维数组是一样的。
注意长度是直接用数字大小来代表,而索引时是从0开始算的!
例如:
#include<stdio.h>
main(){
int a[5];//定义一个长度为5的一维数组a
int b[5][6];//定义一个5行6列的二维数组b
}
在定义数组时可以不定义长度,可以由编译器来决定,只要在定义时赋值就可以了,这时括号内可以不写数值。
例如:
#include<stdio.h>
main(){
int a[] = {0,1,2,3,4};//定义一个长度为5的数组,内容为0,1,2,3,4
}
③ 怎么在C语言中重新定义数组的长度
C语言一维数组分静态一维数组和动态一维数组两种。 一、静态一维数组,在定义的时候就已经确定其长度。如 int a[10];就是定义了一个长度为10个元素的整型数组。 静态数组不支持长度的增加。如果要增加长度,只能新定义一个更长的数组,
④ C语言中如何增加数字输出的长度用double只有6位啊
printf("%.15lf",d);假设d是double型的变量 该句表示输出d至小数点后15位
⑤ C语言实现宏定义数组增加长度,不用指针
宏定义数组无法动态增加长度
只能通过修改宏的方式,重新编译增加长度.
比如
#defineN100
inta[N],b[N],c[N];
定义的a b c都是100个元素.
修改 #define N 1000
那就都是1000个元素了.
⑥ 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语言中怎么实现任意长度字符串输入
其实核心就是实现动态数组,无论字符串多长,都能够储存。
用getchar一个一个得到字符,直到文件结束。
核心代码实现:
intn=0,k=100;//初始化,字符串长度为0,字符串空间长度为100
char*s2=NULL,s1=(char*)malloc(100);//初始化字符串空间
if(s1==NULL)return;//内存分配失败,返回
while((c=getchar())!=EOF){//判断是否到文件结束,一个个读取字符
if(k<=n){//当前字符串长度大于等于字符串空间长度时
k*=2;//长度增长2倍
s2=(char*)realloc(s1,k);//重新分配内存
if(s2==NULL){//内存分配失败
free(s1);//释放已分配内存
return;
}else{//内存分配成功
s1=s2;
}
}
s1[n++]=c;//字符串赋值字符
}
s1[n]=0;//字符串末尾置为
⑧ c语言怎么输入任意长度的一个数组
首先 严格来说 不可能出现任意长度。 内存是有限的 超出一定长度后,不可能存的下,虽然这个值可能是超级大的,但总有限度。
其次,所谓的任意长度,其实就是可变长数组。
那么,在事先不知道数组规模下,就要靠输入,来确定数组大小了。
重点在于,要开辟多大的数组来存
一般有这么几种情况
1 直接开一个足够大的。 比如 虽然不知道有多大,但最大不超过1000个,那就可以直接开个1000元素的数组。
2 动态分配, 使用malloc动态分配内存。
当出现可能的不够情况,用realloc重新分配。
⑨ c语言如何输入任意长度的字符串数组
方法:
1)逐个元素进行赋初值。例如:
char
a[12]={'g','o','o','d','
','m','o','r','n','i','n','g'};
采用这种方式对字符数组初始化,可以不包括结束标志,这是合法的。但在对数组整体输出时系统无法判断字符串是否结束,输出结果会存在问题。因此通常人为的加上‘\0’。上例做如下改动更合理:
char
a[13]={'g','o','o','d','
','m','o','r','n','i','n','g','\0'};
2)用字符串常量来初始化字符数组:
char
a[]="good
morning";或
char
a[]={"good
morning"};
采用这种方式初始化字符数组,可以不指定数组长度,但数组的实际长度比字符串常量的长度多1,因为系统会在最后添加字符串结束标志‘\0’;若指定了数组的长度,如果字符串常量的长度大于数组长度会出错,如果小于数组长度,系统会将未赋值的元素全部充成‘\0’。