2014-05-14 19 views
1

我想傳遞一個字符數組到另一個函數,但一些字符可能是\ 0。 陣列是兩個串的「異或」和因此的\ 0的一例的輸出可以是: \ 0 =「A」 ^「A」傳遞一個字符數組與 0字符到其他函數

如果我例如嘗試發送ARR [3] = { \ 0,1,2} to func foo:

void foo(char* c){ 
... 

} 

然後c將等於「」。

在C中做正確的方法是什麼?

編輯: 我最終使用@AntonH和@Cody灰色技巧解決了它,我發送了我想要複製的字符串的大小,並在我的foo函數中使用它。

例如在功能串聯我的字符串:

void catMsg(char* dest, char* source, int sourceSize) 
{ 
    int i,destLen; 
    destLen= strlen(dest) ; 
    for(i=0;i<sourceSize-1;i++) 
     dest[destLen+i] = source[i]; 
    dest[destLen+i] = '\0'; 
} 
+1

它的工作方式如果你使用它作爲一個字符串。如果您將它用作數據數組,請根據數組的大小發送大小(void foo(char * c,int size)')並循環。 – AntonH

+1

這是沒有問題的,你只需要傳遞數組的* length *作爲參數,因爲沒有可用於自動確定它的標記值。 –

+0

[nul終止一個int數組]可能的重複(http://stackoverflow.com/questions/2998983/nul-terminating-a-int-array) –

回答

1

總結礦山和@科迪灰色的答案。

null字符串結束符僅適用於將它用作字符串的情況。

如果你使用它作爲char的數組,那麼它就像任何其他值一樣。

爲了能夠使用它,您需要將數組大小作爲附加參數傳遞,並使用大小循環訪問數組,而不是根據任何終止符。

void foo(char* c, int size){ 
    ... 
} 
+0

所以我想如果我想將它連接到另一個字符串,我將不得不遍歷所有的字符。對? 是不是有一種方法可以傳遞數組作爲參考?類似於: (&arr)[3] – MaxGold

+0

@MaxGold您不能使用C字符串函數,因爲這些函數基於終止字符串的'0'。你將不得不使用類似'memcpy()'的東西,但是這需要一個大小,它不會自動在C函數中傳遞。 – AntonH

+0

謝謝, 聽起來像個好主意。 我會稍後回覆它的情況。 – MaxGold

相關問題