本文目錄一覽:
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;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241210.html