簡體   English   中英

編譯時錯誤C編程數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM