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