2014-04-17 62 views
0

我正在考慮在掃描時將內存並排分配給數組的程序。我結束了這個程序,它不工作! (當然,我正在做一個大錯誤;))需要幫助!提前致謝!將內存自動分配到數組

char *arr; 
int c=1,i=0; 
arr=(char*)calloc(c,sizeof(char)); 
do 
{ 
    arr[i]=getch(); 
    printf("%c",arr[i]); 
    c=c+sizeof(char); 
    arr=(char*)realloc(arr,c); 
    i++; 
}while(arr[i-1]!=13); 
arr=(char*)realloc(arr,c); 
arr[i]='/0'; 
printf("%d",sizeof(arr)); 
puts(arr); 
free(arr); 
+2

什麼不工作?發生什麼事 ?另外,請注意,它經常需要重新分配指針。 – blue112

+1

請注意'sizeof(arr)'會打印'char *'的大小(最有可能是8臺機器)。那是你要的嗎? – someguy

+3

[請不要在C](http://stackoverflow.com/a/605858/28169)中投射'malloc()'和朋友的返回值。 – unwind

回答

2
arr[i]='/0'; 

你想要的是:

arr[i] = 0; 

arr[i] = '\0'; 

而且,請注意,這是一個不好的做法,所以經常重新分配內存。這真的是CPU消耗。

另一方面,您可以做的事情是擁有一個動態大小的數組,可以從一個適合您使用的數字開始(比如200),並且每次重新分配一次。這樣,你就不會重新分配,並且仍然有一個可適應的大小數組。

char *arr; 
int size = 200, i = 0; 

arr = (char*) calloc(size, sizeof(char)); 
do 
{ 
    arr[i] = getch(); 
    printf("%c", arr[i]); 

    if (i + 1 > c) 
    { 
     c *= 2; 
     arr = (char*) realloc(arr, c); 
    } 

    i++; 
} 
while(arr[i-1]!=13); 

arr[i] = '\0'; 
printf("(%d) %s", strlen(arr), arr); 
free(arr); 

Also, you shouldn't cast return of malloc(), calloc() or realloc(),如解開所述。

+0

所以!你有其他的邏輯嗎? –

+0

編輯我的帖子。 – blue112