Thực sự là một bài đăng cho một số lời khuyên về việc sử dụng realloc, cụ thể hơn, nếu tôi có thể sử dụng nó để đơn giản hóa mã hiện có của tôi. Về cơ bản, những gì dưới đây làm, nó tự động cấp phát một số bộ nhớ, nếu tôi đi qua 256, sau đó mảng cần phải được tăng kích thước, vì vậy tôi malloc một mảng temp, với 2x kích thước, memcpy vv (xem bên dưới).Sử dụng Realloc trong C
Tôi đã tự hỏi liệu realloc có thể được sử dụng trong mã dưới đây hay không, để đơn giản hóa nó, lời khuyên, mã mẫu hoặc thậm chí gợi ý về cách triển khai nó được đánh giá cao!
Chúc mừng.
void reverse(char *s) {
char p;
switch(toupper(s[0]))
{
case 'A': case 'E': case 'I': case 'O': case 'U':
p = s[strlen(s)-1];
while(p >= s)
putchar(p--);
putchar('\n');
break;
default:
printf("%s", s);
break;
}
printf("\n");
}
int main(void) {
char c;
int buffer_size = 256;
char *buffer, *temp;
int i=0;
buffer = (char*)malloc(buffer_size);
while (c=getchar(), c!=' ' && c!='\n' && c !='\t')
{
buffer[i++] = c;
if (i >= buffer_size)
{
temp = (char*)malloc(buffer_size*2);
memcpy(temp, buffer, buffer_size);
free(buffer);
buffer_size *= 2;
buffer = temp;
}
}
buffer[i] = '\0';
reverse(buffer);
return 0;
}
Lưu ý về kiểu: Bạn nên ** không ** để truyền giá trị trả lại của 'malloc'. –
Và 'reverse' sẽ lấy đối số là' const char * '. –