2011-10-17 34 views
1

這是將字符指針轉換爲字符。如何將字符指針轉換爲C中的字符打開VMS

我跟着從另一個主題的代碼,但它似乎不工作給我。 我正在使用Open VMS Ansi C編譯器。我不知道與另一個平臺 有什麼不同。

main(){ 

char * field = "value1"; 
char c[100] = (char)field; 

printf("c value is %s",&c); 

}

的這個輸出是

c value is 

這是意外對我來說,我期待

c value is value1 

希望你能幫助我。

+0

您好感謝您的回答傢伙...它的工作。 但是,我可以創建自己的函數,像這個場景示例conv_ptr_str函數,它將指針char轉換爲char; 說 char * field =「value1」; char c [100] =(char)字段; char c = conv_ptr_str(field); 這樣我可以重新使用資源或 這是轉換事物的唯一方法嗎? –

回答

4
strcpy(c, field); 

您必須確保c有餘地field所有的字符,包括NUL終止符。它在這種情況下,但一般情況下,你將需要一個if檢查。

編輯:在C中,你不能從函數返回一個數組。如果您需要分配存儲空間,但不知道長度,請使用malloc。例如:

size_t size = strlen(field) + 1; // If you don't know the source size. 
char *c = malloc(size); 

然後,像以前一樣使用相同的strcpy調用。

0

在C中,char類型包含單個字符,而不是字符串。 char c[100];沒有分配長度爲100的char,它分配一個數組的100個連續的char s,每個字節長,並且數組可以容納一個字符串。

那麼你彷彿想要做的是與同char值是在該位置處由char *指出,以填補char秒的陣列。要做到這一點,你可以用strncpy()或任何其他幾個功能:

strncpy(c,field,100); /* copy up to 100 chars from field to c */ 
c[99] = '\0';   /* ..and make sure the last char in c is '\0' */ 

..或使用strcpy(),因爲你知道該字符串將適合c(更好地在這種情況下):

strcpy(c,field); 

..或者:

snprintf(c,100,"%s",field); 
+1

'函數strncpy()'是*不*只是一個更安全的strcpy的'版本()'(如'的snprintf()'是的sprintf的'更安全的版本()')。 'strncpy()'可以使目標緩衝區沒有終止(即不包含字符串),或者當只需要一個字符時可以不必要地用多個''\ 0'字符填充目標緩衝區。確認目標緩衝區足夠大後,最好使用'strcpy()'。 –

+0

@KeithThompson在上面的例子中,字符串顯式爲空終止。你有一點可能填充額外的空字符......儘管在strcpy()不一定更快之前源字符串的長度未知的情況下調用'strlen()'。 – Dmitri