[英]Compile time error C programming Arrays
我寫了一個小的C程序,需要一些用戶輸入並打印出來,
#include<stdio.h>
int main()
{
char name[], char add[];
short int height;
unsigned char buffer[1024];
int i,j,n,m;
printf("enter your name_length num: n is:-\n");
scanf("%d",&n);
printf("enter your name\n");
for(i=0;i<n;i++)
{
scanf("%c",&name[i]);
}
printf("enter your address: m is :-\n");
scanf("%d",&m);
for(j=0;j<n;j++)
{
scanf("%c",&add[j]);
}
printf("enter your height\n");
scanf("%d",&height);
for(i=0;i<n;i++)
{
printf("your entered name is:\t",name[i]);
}
for(j=0;j<n;j++)
{
printf("your entered address is:\t",add[i]);
}
printf("your entered height is:\n",height);
return;
}
但是在運行時出現錯誤-
所以我不知所措地想知道為什么缺少數組大小,有什么我錯過的嗎?
聲明語法幾乎沒有問題。 更改此行
從
char name[], char add[];
至
char name[256], add[256];
此后,您將獲得運行時錯誤(歡迎使用C編程)
在C語言中,您必須使用常數整數聲明數組,例如:
char name[1000], add[1000];
OR
char name[1000];
char add[1000];
OR
int size=1000;
char name[size];
char add[size];
並且您的主函數應該在最后返回整數,使用
return 0;
正如其他人指出的那樣,行char name[], char add[];
是無效的。 這是因為無法知道要分配給陣列多少內存。 有兩種解決方案,具體取決於您的問題。
在這種情況下,最好的解決方案是將聲明移到您知道用戶名長度的下面(假設您使用的格式不是嚴格要求頂部的聲明):
printf("enter your name_length num: n is:-\n");
scanf("%d",&n);
char name[n];
這將創建一個固定長度的數組(長度為n
),並且鑒於用戶名在此程序的過程中不太可能更改長度,這是可以接受的。
另一種解決方案是使用內存分配,這使您可以在運行時增大或減小陣列的大小。
char *name = null;
...
printf("enter your name_length num: n is:-\n");
scanf("%d",&n);
name = malloc( n * sizeof(char));
這為數組分配了n * sizeof(char)
個字節,以后可以對其進行擴展,重新分配或釋放。 這是更靈活的選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.