我正在考虑一个程序,它在扫描时将内存并排分配给一个数组。我最终得到了这个程序,它无法正常工作! (当然我做了一个大错误;))需要帮助!提前致谢!
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);
答案 0 :(得分: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(),正如unwind所述。