本文目录一览:
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语言怎样定义变长数组
”变长数组“确实是有的,是在C99标准才出现的。题主的写法没有错。变长指的就是可以用变量指定数组大小,而不是说数组大小可以在runtime改变。(”变长“这个这个翻译很怪啊.....)
写全的话应该是
int x = 2; //x定义并赋值,当然不一定是2
char array[x];测试了一下,这样的代码在VC6.0下会报错,因为对C99新标准没有很好地实现。VS2005也不行。VS2013可以正确编译。gcc
3.2.2也可以正确编译。
c语言中的变长参数
fmt是第一个参数的首地址。
根据你后面的代码来看,你传递的第一个参数是一个字符串,即%d %d %s\n。你凭什么要认为你的第一个参数是4呢?奇怪……
操作符这里是取fmt的地址,没有涉及引用啊?
转化成char*的意思估计是为了强调你第一个传过去的参数是字符串吧?这种叫做“类型转换”,不会改变fmt里面的数据的,所以肯定不会指向错误的地址,瀑布汗。
最后,+sizeof(fmt)的目的需要肯定,是为了打印出4这个字符来。那么这句话意思就很明白了:首先,将fmt强制转换为char*类型,然后呢,因为fmt已经是char*了,所以移动一个char*那么长的“位置”,来到存储“4”这个数字的地方……再多说一句:你程序里变长参数fmt的结构是“char*,int,int,char*”这样子的,两个char*分别指向两个字符串。
希望你看明白了:D
C语言实现一个可变长的二维数组
int main(int argc, char* argv[])
{
int a;
printf("请输入行数:");
scanf("%d",a);
int **p=new int*[a];
int *n=new int[a];
for (int i=1;i=a;i++)
{
printf("请输入第%d行元素的个数:",i);
scanf("%d",n[i-1]);
printf("\n");
int q=n[i-1];
p[i-1]=new int[q];
for (int j=0;jn[i-1];j++)
{
p[i-1][j]=1;
}
}
for (int x=0;xa;x++)
{
for (int y=0;yn[x];y++)
{
printf("%d",p[x][y]);
}
printf("\n");
}
}