2014-04-17 82 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