[英]C - Dynamic Memory allocation - copy string
對於以下程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int size = 16, len = 0, c;
char* data = (char*)malloc(sizeof(char) * size);
while((c = getchar()) != EOF) {
if(len == size) {
size *= 2;
char* data_new = (char*)realloc(data, sizeof(char) * size);
if(data_new == NULL) {
free(data);
return -1;
}
if(data_new != data) {
memcpy(data_new, data, size);
data = data_new;
}
}
data[len] = c;
len++;
}
data[len] = '0';
printf("%s\n", data);
free(data);
return 0;
}
我認為錯誤在於realloc部分,因為如果im將size設置為int high,則一切正常。
有人給我一個提示,我如何正確地重新分配呢?
感謝您的支持
當realloc
返回不同的指針時,您不需要復制數據-為您完成。 實際上,這是一個錯誤,因為您正在從不再存在的源中復制數據,並且復制的數據量是原來的兩倍! 所以你只需要
data = data_new;
另外這條線是錯誤的
data[len] = '0';
它應該是
data[len] = '\0';
並且還可以寫超出內存范圍的內容。 您應該在寫入終止符之前再次檢查大小,或更簡單地說,在使用size-1
時重新分配內存,因為您知道將需要該額外的字節。
if(len == size - 1) {
// . . .
}
還要注意,如果要輸入每個換行符分隔的字符,則getchar()
也會讀取每個換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.