Tôi đoán rằng bạn muốn ghép các chuỗi. Nếu có, vâng. Bạn phải biết bao nhiêu không gian bạn muốn trước khi bạn phân bổ nó.
Thực tế, bạn có thể sử dụng realloc
, nhưng nó thực sự chỉ sao chép chuỗi trước đó mọi lúc và ít hiệu quả hơn nhiều.
Một số mã: (giả sử char *s[]
và int n
)
int i,l=1;
for (i=0;i<n;i++) l+=strlen(s[i]);
char *r=malloc(l);
r[0]=0;
for (i=0;i<n;i++) strcat(r,s[i]);
Edit: Theo một số ý kiến, strcat
là không hiệu quả khi bạn biết độ dài. (. Tôi vẫn thích nó vì nó phân bổ bộ nhớ trong một thời gian) Một số mã có hiệu quả hơn là:
int i,l=1;
for (i=0;i<n;i++) l+=strlen(s[i]);
char *r=malloc(l);
char *d=r;
for (i=0;i<n;i++) {
srtcpy(d,s[i]);
d+=strlen(s[i]);
}
Một số mã sẽ giúp chúng tôi hiểu bạn đang hỏi điều gì. – user7116
Có vẻ như bạn muốn sao chép mảng chuỗi C. Có đúng không? – vitaut
Tôi muốn cuối cùng nối các chuỗi trong mảng vào một chuỗi đơn. Cần phải biết bao nhiêu không gian bộ nhớ để phân bổ cho chuỗi đích. Tôi không hiểu làm thế nào bạn biết những gì để đặt là điều kiện chấm dứt trong vòng lặp for, tức là chiều dài của mảng là bao nhiêu. –