① 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(len>n)//字元串長度大於初始大小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語言中數組長度怎麼設置
定義數組時在中括弧內寫上代表長度的數字,定義一維數組和二維數組是一樣的。
注意長度是直接用數字大小來代表,而索引時是從0開始算的!
例如:
#include<stdio.h>
main(){
int a[5];//定義一個長度為5的一維數組a
int b[5][6];//定義一個5行6列的二維數組b
}
在定義數組時可以不定義長度,可以由編譯器來決定,只要在定義時賦值就可以了,這時括弧內可以不寫數值。
例如:
#include<stdio.h>
main(){
int a[] = {0,1,2,3,4};//定義一個長度為5的數組,內容為0,1,2,3,4
}
③ 怎麼在C語言中重新定義數組的長度
C語言一維數組分靜態一維數組和動態一維數組兩種。 一、靜態一維數組,在定義的時候就已經確定其長度。如 int a[10];就是定義了一個長度為10個元素的整型數組。 靜態數組不支持長度的增加。如果要增加長度,只能新定義一個更長的數組,
④ C語言中如何增加數字輸出的長度用double只有6位啊
printf("%.15lf",d);假設d是double型的變數 該句表示輸出d至小數點後15位
⑤ C語言實現宏定義數組增加長度,不用指針
宏定義數組無法動態增加長度
只能通過修改宏的方式,重新編譯增加長度.
比如
#defineN100
inta[N],b[N],c[N];
定義的a b c都是100個元素.
修改 #define N 1000
那就都是1000個元素了.
⑥ c語言中如何自定義數組長度
動態分配的數組可以自定義數組的長度,示例如下:
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
int
main()
{
printf("輸入要分配的內存大小:");
int
size;
scanf("%d",
&size);
//輸入自定義的數組長度
int
*pstart
=
(int
*)malloc(sizeof(int)
*size);
if
(pstart==0)
{
printf("不能分配內存\n");
return
0;
}
memset(pstart,
0x00,
sizeof(int)
*
size);
int
inx;
for
(inx=0;
inx!=size;
++inx)
pstart[inx]
=
inx;
for
(inx=0;
inx!=size;
++inx)
printf("%d\t",
pstart[inx]);
printf("\n");
return
0;
}
⑦ c語言中怎麼實現任意長度字元串輸入
其實核心就是實現動態數組,無論字元串多長,都能夠儲存。
用getchar一個一個得到字元,直到文件結束。
核心代碼實現:
intn=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;//字元串末尾置為
⑧ c語言怎麼輸入任意長度的一個數組
首先 嚴格來說 不可能出現任意長度。 內存是有限的 超出一定長度後,不可能存的下,雖然這個值可能是超級大的,但總有限度。
其次,所謂的任意長度,其實就是可變長數組。
那麼,在事先不知道數組規模下,就要靠輸入,來確定數組大小了。
重點在於,要開辟多大的數組來存
一般有這么幾種情況
1 直接開一個足夠大的。 比如 雖然不知道有多大,但最大不超過1000個,那就可以直接開個1000元素的數組。
2 動態分配, 使用malloc動態分配內存。
當出現可能的不夠情況,用realloc重新分配。
⑨ c語言如何輸入任意長度的字元串數組
方法:
1)逐個元素進行賦初值。例如:
char
a[12]={'g','o','o','d','
','m','o','r','n','i','n','g'};
採用這種方式對字元數組初始化,可以不包括結束標志,這是合法的。但在對數組整體輸出時系統無法判斷字元串是否結束,輸出結果會存在問題。因此通常人為的加上『\0』。上例做如下改動更合理:
char
a[13]={'g','o','o','d','
','m','o','r','n','i','n','g','\0'};
2)用字元串常量來初始化字元數組:
char
a[]="good
morning";或
char
a[]={"good
morning"};
採用這種方式初始化字元數組,可以不指定數組長度,但數組的實際長度比字元串常量的長度多1,因為系統會在最後添加字元串結束標志『\0』;若指定了數組的長度,如果字元串常量的長度大於數組長度會出錯,如果小於數組長度,系統會將未賦值的元素全部充成『\0』。