您的位置:

c语言动态长度字符串,c语言字符串长度的函数

本文目录一览:

c语言中怎么实现任意长度字符串输入

其实核心就是实现动态数组,无论字符串多长,都能够储存。

用getchar一个一个得到字符,直到文件结束。

核心代码实现:

        int n=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;                          //字符串末尾置为\0

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语言动态分配变长度的二维字符串数组的函数的问题。

#include stdio.h

#include stdlib.h

char **read(int m) {  // 第一维的长度作为形参输入

int i = 0,n;

char **a = (char **)malloc(sizeof(char *) * m);// 分配第一维的内存

for(i = 0;i  m;++i) {

printf("input the length of the %d province!\n",i + 1);

scanf("%d",n); // 读取第二维的长度

getchar();

a[i] = (char *)malloc(sizeof(char) * (n + 1));  // 分配第二维的内存

if(a[i]) {

printf("please input the name of the province\n");

gets(a[i]); // 输入字符串

}

else exit(-1);

}

return a;

}

int main() {

int i,n = 3;

char **s = read(n);

for(i = 0; i  n; ++i)

printf("%s\n",s[i]);

return 0;

}