2013-02-09 50 views
4

我有一個字符arraym char Input [200];將字符數組轉換爲常量字符*

截至目前,輸入字符串爲「abc.txt」。

我有一個方法,嚴格需要一個const char *,我怎麼能將我的輸入數組轉換爲一個const char *。

我試着對它進行轉換並傳遞它,但是在使用GDB時,我覺得自從輸入中剩餘的192個插槽填充了垃圾(或者是空的),它不被函數接受。當我將字符串文字「a.txt」傳遞給它的函數時。所以在這一點上,我想從輸入數組中提取填充的元素,並將其轉換爲一個const char *。

我將輸入作爲用戶的文件名,因此我使用了char數組來存儲輸入。

int main() 
    { 
    char *name; 

    char input[1024]; 
    strcpy(input, argv[1]); 

    name = input; 

    sys_open(input, "O_RDWR", 00700); 


    } 
+0

就像我在對我的回答的評論中所說的,第二個參數是'open'(或者說'sys_open'(你不應該直接調用))是**不是**字符串。 – 2013-02-09 06:23:56

+0

const char *文件名,int標誌,int模式。這些是3個參數 – user1888502 2013-02-09 06:27:23

+0

是的,那麼爲什麼你將第二個參數作爲字符串傳遞?帶有或不帶有它的 – 2013-02-09 06:27:43

回答

9

您應該可以直接傳遞它。一個char []可以轉換成一個const char *,但反之亦然。

你在gdb中看到所有垃圾的原因是因爲數組沒有預初始化以包含任何東西,所以你只是看到之前存在的任何垃圾。只要你的字符串是空終止的,它應該沒問題。

+0

如果我有一個字符串複製到它,我是否需要分配內存的char之前鑄造它,導致其不適合我,儘管知道有一些文字中的字符。我覺得它分配的空間是200,但有時用戶只能傳遞5個字符,其餘的194是空的,因此函數沒有正確解析它 – user1888502 2013-02-09 06:08:58

2

數組自然衰變爲指針,所以這不是問題。

「垃圾」的問題是因爲這就是陣列所在的內存。重要的是要看字符串是由'\0'字符終止。

因此字符串"abc.txt"看起來像這樣

'a', 'b', 'c', '.', 't', 'x', 't', '\0' 

後,這並不重要,因爲所有的字符串函數停止在'\0'會發生什麼。

如果使用包含字符串數組,它使用strlen得到的長度是很重要的,而不是sizeof,因爲sizeof運營商給整個數組的長度,而不是包含字符串。

+0

如果我有一個200的數組,並且使用寫入系統調用,用戶通過abc.txt,我可以將它作爲const char *參數傳遞給sys_open。這就是我正在做的和不工作的。當我將「abc.txt」作爲文字傳遞時,我的邏輯是正確的,因爲它在同一個函數中起作用。 – user1888502 2013-02-09 06:10:38

+1

@ user1888502也許你應該顯示_how_你使用這個數組?當你應該使用'strlen'時,你可能會使用'sizeof'來給'write'調用一個長度。 – 2013-02-09 06:11:30

+0

我只是簡單地將它作爲開放(輸入,「O_RDWR」,00700); 其中輸入是一個char [200],其中存有來自用戶的abc.txt,帶有%s的printf會爲我驗證它。但它不起作用。 – user1888502 2013-02-09 06:12:58