本文目录一览:
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;
}