2012-07-09 78 views
0

我試圖動態分配大小爲numberOfFrags的數組frags2,並將原始數組的內容複製到它。我嘗試過無數的方法和搜索,並且不明白這裏出了什麼問題。新數組上的sizeof返回0而不是我認爲的我malloc'd。動態分配字符串數組的問題

任何幫助將不勝感激!

int main(int argc, const char* argv[]) { 
    char* frags[MAX_FRAG_COUNT]; 
    FILE* fp = fopen(argv[1], "r"); 
    int numberOfFrags = ReadAllFragments(fp, frags, MAX_FRAG_COUNT); 
    fclose(fp); 
    char** frags2 = (char**)malloc(numberOfFrags * sizeof(char*)); 
    for (int i = 0; i < numberOfFrags; i++) { 
     frags2[i] = frags[i]; 
    } 
    qsort(frags2, sizeof(frags2)/sizeof(char *), sizeof(char*), cstring_cmp); 
+0

參見[如何找到的sizeof(一個指針指向數組)(http://stackoverflow.com/questions/492384/how -to-find-the-sizeofa-pointer-pointing-an-array) – 2012-07-09 09:27:51

回答

4

的sizeof新陣列上返回0,而不是什麼,我想我malloc分配

這不是一個陣列,這是一個指針。在這種情況下,運算符sizeof會生成指針的大小,而不是您分配的數量。

所以不是說sizeof東西,你可以嘗試

qsort(frags2, numberOfFrags, sizeof(char*), cstring_cmp); 
+0

非常感謝,工作。但是我不明白的是,原始數組,碎片有什麼不同。調用sizeof(frags)返回80000(MAX_FRAG_COUNT是20000)。 – 2012-07-09 09:23:22

+0

@JasonBlock [你剛剛說過](http://c-faq.com/aryptr/aryptr2.html):*原始**數組***。 'frags2'不是一個數組,它是一個指向你分配地址的指針。另一種(誤導)的方式是「'sizeof'在編譯時工作」。 – cnicutar 2012-07-09 09:24:16