2012-01-25 35 views
-2

這個問題很簡單。我如何將char[]轉換爲C中的char*? 我真的很難找到解決方案。所以,你的幫助是高度讚賞:)如何將char []轉換爲C中的char *?

這就是爲什麼我需要這樣的:

sprintf(name,"%c%c%%HACKED%c%c.virus",a,b,c,d); // print a formatted text to string (char[]) 
strcat(buffer,currentPath); // currentPath is of data type char[] 
strcat(buffer,"\\"); 
strcat(buffer,name); // Now this is where the problem comes in. Since strcat function needs a const char* for it's second argument. 

printf("%s",name); 
+1

不工作?我的意思是,最後一個'strcat'?我會很驚訝。 'name'是一個真正的char [],是嗎?你沒有包括它的定義。否則,'printf'也會失敗。 –

+13

專業提示:避免使用擴展名.virus命名您的病毒。 – aardvarkk

+1

你知道,大腦激活失敗。我剛看到「string const,不管怎樣」,甚至沒有處理內容的英文含義。也許我應該是*提倡*使用'strcat'和一些粗略的指針數學:-) ++ @ aardvarkk – BRFennPocock

回答

5

你不必做任何事情。數組自動衰減到指針,所以你的代碼看起來很好。

在首次撥打strcat()之前,您需要確保buffer以有效的以NUL結尾的字符串開頭。它也需要是可寫的(例如,它不能是指向字符串文字的指針)。

你還需要確保你不會溢出buffer。我建議你看看strncat()

+0

嗯,我讀過OP的「這是問題出現的地方」,因爲「我在這裏得到一個編譯器錯誤」。 –

+0

strncat()是一個壞建議。總是。 – wildplasser

+0

謝謝!愚蠢的我..我只是溢出緩衝區,這就是爲什麼它不起作用。 – Raven

1

我假設的代碼已宣佈緩衝區的東西,如:

 char buffer[100]; 
    char name[100]; 

不是你的問題的一部分,但在新代碼中不使用strcat。決不。檢出strncat。這是真的很危險strncat是(不多)。

至於你直接的問題:你可以使用name,就好像是一個char*。 C編譯器會自動將其轉換爲(邏輯等效)&(name[0])

+0

'strcat'同樣危險。 'strncpy','sprintf'等,所有潛在的段錯誤。 –

1

順便說一句,爲什麼傻的strcat()的事情嗎?爲什麼不:

sprintf(name,"%c%c%%HACKED%c%c.virus",a,b,c,d); 
sprintf(buffer,"%s\\\\%s", currentPath, name); 

    /* should this be printf("%s", buffer); ?? */ 
printf("%s",name); 

而且,正如BPRcock所說:snprintf()更好。

+0

或者只是'sprintf(buffer,%s \\%c%c %% GEHAKT%c%c.virus「,currentPath,a,b,c,d);' –

+1

是的,但可能是OP有名字部分的特別計劃。 – wildplasser

1

在C中,char [N]類型的對象的值被轉換爲char *類型的值。

void *p; 
char a[16] = {0} 

p = a; 
在表達式語句 p = a;a

char *類型。

(C99,6.3.2.1p3)「除了當它是sizeof操作或一元&操作者的操作數,或是用於初始化數組文本的字符串,其具有鍵入一個表達式」的陣列類型「被轉換爲類型爲」指向類型的指針「的表達式,該表達式指向數組對象的初始元素,而不是左值。」