2012-04-26 56 views
0

我只想要功能如何複製數組? (大小相同的)

char chaine[Lenght]; //Lenght = 20 
function(chaine, sizeof(chaine)); 

當我所謂的「功能」的「CHAINE」大小隨機變化後,創建一個新的陣列「CHAINE」,但同樣大小。

新數組「chaine2」也需要充滿「*」個字符。

設會見試圖用printf的解釋:

 printf("chaine = %s\n", chaine); 

會在屏幕上顯示是這樣的:CHAINE = WORDS(5個字符)

,我想 「chaine2」 要顯示這樣的: chaine2 = *****(5星級)

我,我的英語道歉,感謝您閱讀

+1

你沒有初始化'chaine'你未能表現出代碼在'功能'。 – 2012-04-26 02:20:34

回答

1

記住char陣列SPECI al,這意味着他們有大小,您在聲明它們時指定,長度,這取決於它們的內容。數組的大小是分配給它的內存量。字符串的長度是終止空字符之前的字符數('\0')。

some_func() { 
    int len = 20;  // Size of the array 
    char chaine[len]; // Uninitialized array of size 20. 

    memset(chaine, '\0', sizeof(chaine)); // Init to all null chars, len = 0 
    strcpy(chaine, "WORDS"); // Copy a string, len = 5 

    char *chaine2 = function(chaine, sizeof(chaine)); 
    printf("%s\n", chaine2); 
    free (chaine2); 
} 

當你將一個數組傳遞給一個函數時,它就像一個指針一樣對待。所以sizeof(str)裏面的函數會一直返回指向char的指針的大小,而不是原始數組的大小。如果你想知道的字符串是多久,確保它是空值終止,並使用strlen()這樣的:

char *function(char *str, int len) { 
    // Assume str = "WORDS", len = 20. 
    char *new_str = malloc(len); // Create a new string, size = 20 

    memset(new_str, '\0', len); // Initialize to nulls 
    memset(new_str, '*', strlen(str)); // Copy 5 '*' chars, len = 5 

    return new_str; // Pointer to 20 bytes of memory: 5 '*' and 15 '\0' 
} 
1

我會假設你正在使用C99(等等都是可以使用的變量長度數組)。

如果你想創建的function()外的陣列(其中chaine仍然是一個數組),你可以簡單地做:

char chaine2[Lenght]; 

或者,可能會更好:

char chaine2[sizeof(chaine)]; 

如果」在function()之內,請注意chaine將是一個指針,因爲編譯器將函數參數中的數組定義看作指向它的第一個元素的指針(如果這樣會造成混淆,remember that pointers are not arrays

所以,即使功能是這樣定義的:說

function(char *chaine, size_t length) { 

無論哪種方式,你可以創建chaine2

char chaine2[length]; 

function(char chaine[], size_t length) { 

編譯器將它看作

但不是

char chaine2[sizeof(chaine)]; // DONT DO THIS 

因爲sizeof將返回指針的大小而不是數組的大小。

但是你創建它,如果你想以填補「*」字符的新數組,你可以使用memset()

memset(chaine2,'*',sizeof(chaine2)); 
+0

請記住,'chaine2 []'被分配在堆棧上,所以當函數返回時它會失效。 – 2012-04-26 02:40:29

2
#include <stdio.h> 
#include <stdlib.h> 

char *dup_and_fillStar(const char *src, const size_t size){ 
    char *p,*ret; 
    ret=p=(char*)malloc(sizeof(char)*size); 
    while(*src++) 
     *p++='*'; 
    *p = '\0'; 
    return ret; 
} 

#define Length 20 

int main(void){ 
    char chaine[Length] = "WORDS"; 
    char *chaine2; 

    chaine2 = dup_and_fillStar(chaine, sizeof(chaine)); 
    printf("chine = %s\n", chaine); 
    printf("chine2 = %s\n", chaine2); 
    free(chaine2); 

    return(0); 
} 
相關問題