2013-07-17 46 views
-2

我在幾段代碼中看到一個聲明爲char *的字符串。這是如何工作的,它肯定是指向單個字符的指針,而不是組成字符串的字符數組。如果我希望將字符串輸入應用於如下所示的方法:字符串文字如何等於char *,我應該如何將一個字符串作爲參數

theMethod("This is a string literal"); 

參數應該是什麼數據類型?

+0

char *將做的工作,如果你在字符串中存儲字符串 –

回答

5

surely it is a pointer to a single char, not an array of chars

這是指向數組char的第一個字符的指針。通過執行指針運算和「數組」索引,可以使用指向其第一個元素的指針訪問數組的每個元素。

What datatype should the parameter be?

const char *,如果你不希望從函數內修改字符(這是一般情況下),並char *如果你這樣做。

+0

函數需要一個字符串傳遞給SDL_WM_SetCaption(常量字符*,常量字符*)當我嘗試使用char *我自己,出現在SDL窗口中的標題是無意義的負載。 (這個問題可能是特定於SDL的,但可能會出錯) – w4etwetewtwet

+0

@handuel不幸的是,這還不夠。你應該顯示一些實際的代碼。 「我試圖採取字符」是非信息。 – 2013-07-17 19:29:03

+0

夠公平的。我想我會接受這個答案,併爲這個問題開一個單獨的問題,因爲很難用600個字符表示。 – w4etwetewtwet

2

這是一個常見的初學者-C混淆。指向的任何類型T *含糊不清要麼是指向單個T類型對象的指針,要麼是指向T類型對象的線性數組內的元素的指針,未指定大小。程序員你必須知道哪個是哪一個,並根據需要傳遞長度信息。如果你弄錯了,編譯器會隨着你的程序驅動未定義行爲的懸崖而屹立不倒。

爲C的字符串的程度(也被提出了強烈的情況下,它並沒有真正),他們採取這種模棱兩可的無恥優勢,例如,當你在一個C程序見char *const char *,它幾乎總是將是一個指向字符串的指針,而不是單個的char。指向任何其他類型的指針也是如此。

0

每個定義是char *(或unsigned char *或const char *)類型的「字符串」,但是它是指向該字符鏈的第一個字符的指針(我不想使用單詞數組或向量) 。所不同的是在焦炭看到:「X」(單引號)

這是很好的舊的C程序設計(有時我可以哭失去它)

char *p = "i am here"; 
for (q=p; ++q; *q) { // so lets start with p walk through and end wit the /0 after the last e 
    if (*q=='h') { // lets find the first 'h' and cut the string there 
     *(q-1)=0; 
     break; 
    } 
} 

我沒有使用常量和其他probs這裏,我只是試圖清除

+0

在這個例子中,你正在修改一個字符串常量。由於歷史原因,字符串常量具有類型(char *),但是編譯器允許將它們放在只讀內存中(並且通常會在這些日子裏),並且不允許修改它們。 –

+1

@ElchononEdelson:當然!你是對的,我只是想指出什麼是「字符串」和char *,我認爲這對於學習C的人來說是一個很好的問題。 – halfbit

相關問題