资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言函数变长变量 c语言变长数组使用变量指明数组的长度

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(lenn)//字符串长度大于初始大小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语言传递变长参数

按照你现在给出的代码,

print2(3, 100, 1, 2, 3);

输出的是1 2 3加上一位不确定值

因为va_start(vl, n);这一步理论上可以得到以a开头的va_list指针,但实际上由于编译器优化,它的效果和va_start(vl, a);是相同的

这一点,你可以打印出指针地址来确定一下

从你的代码推测,你是想让print2打印出后四个参数,包括a在内

即 100 1 2 3

如果是这样 可以用另一种方式做到

print2中,不要调用va_start

而是直接 vl=a;

如下

void print2(int n, int a, ...)

{

va_list vl;

// va_start(vl, n);//使用倒数第二个有名变量

vl = a;//编译器想优化 不让。 直接强势插入

vprint(n+1, vl);

va_end(vl);

}

可以试一下是否是你需要的效果。 如果不是 再追问

关于在C语言 声明带有一个变长数组参数的函数

在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数。

1 直接以定长数组做参数,声明形式为:

ret_type func(int a[100]);

这里就是以100个元素的数组做参数的。

2 声明时不带长度,即:

ret_type func(int a[]);

3 以指针替代数组,即:

ret_type func(int *a);

2,3两种均可以用于变长数组。不过这种情况下,需要与函数约定数组长度的确定方法,比如约定规模 ,约定结束值,增加额外参数传长度,在数组元素中包含长度,或采用全局变量传长度等等。


分享名称:c语言函数变长变量 c语言变长数组使用变量指明数组的长度
文章路径:http://www.cdkjz.cn/article/ddpocej.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220