2012-08-29 335 views
1

我正在用c語言編寫代碼。將字符串轉換爲字符串

  1. char a[]={p,r,a,d,e,e,p}
    我想在最後添加'0/'使它字符串。
    或者是否有任何方法使其字符串,而不是在最後加入null?

  2. char *a=pradeep;
    將它轉換爲字符串通過在年底

回答

1
char *a="pradeep"; 

加入空使一個字符串,並在末尾添加空字符。

如果你真的想使用類似的1語法來聲明它,你可以這樣做:

char a[] = {'p','r','a','d','e','e','p', 0}; 

但沒有理由這樣做。

編輯關於在評論問題

如果你想創建n字符的字符串您收到,你可以這樣做:

char *a = malloc(n*sizeof(char)+1); 

如果它總是10個字符或更少,你可以聲明爲

char a[11]; 

然後設置每個a[i]與接收到的值,一個nd最後一個與0

你也可以使用sprintf來進行連接,但無論如何你必須確保你有足夠的地方分配。

+0

其實有一個特例,你可能需要後者。如果您對普通7位ASCII有特殊的擴展名,則不能相信源代碼編輯器中的字體與應用程序具有相同的「擴展ASCII」值。在爲嵌入式顯示器實現符號表時,我遇到過這樣的幾次。解決辦法是輸出ASCII碼而不是符號。使用以前的符號,只能通過添加十六進制值來實現。 - > – Lundin

+0

假設我們要將十六進制值爲0xAA的字符添加到字符串中。如果我們寫「pr \ xAAadeep」,我們會得到一個bug,因爲C字符串文字中的一個十六進制序列只能以非十六進制數字結尾。在這種情況下,編譯器會將AAadee視爲有效的十六進制。所以你的後一個例子逐個字符更安全,不太混亂。 – Lundin

+0

@dystroy,我正在接收一系列字符,將其作爲來自rs232的10個字符。在一個變量中接收到的是字符或一組字符的形式。我想讓他們成爲字符串。 – pradeep

3

您不能更改數組的大小a因此您無法向其添加空終止符。您可以將聲明更改爲:

char a[] = "pradeep"; 

它將隱式添加空終止符。或者:

char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', 0 }; 

但字符串文字更簡單,更清晰。大多數(如果不是全部的話)C字符串庫函數都需要一個以空字符結尾的字符串。

1

你的代碼沒有任何意義,也不會編譯。

字符串字面最好使用字符串文字語法編寫的:

const char *a = "pradeep"; 

這將包括終止字符,使得在那您可以用任何的字符串處理函數使用C字符串a點,打印出, 等等。現在

1
1). char a[]={'p','r','a','d','e','e','p','\0'}; 

其陣列含有有效字符串。

2). char *a="pradeep"; 

這會在結尾處自動追加空格以生成有效的字符串。

0

如果分配一個文本字符串一個字符陣列,編譯器將自動創建與在端部終接'\0'字符正確的數組:

char a[] = "pradeep"; 

上面相同書寫

char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', '\0' }; 

另外,使用陣列是推薦的方式,但上面的第一種替代方案相當於

char *pa = "pradeep"; 

但是,最後,您不能再使用sizeof運算符,因爲這將返回指針的大小,而不是字符串的長度。關於sizeof運算符的另一個注意事項,對於前兩個示例,它將返回數組的大小而不是字符串的長度,即sizeof對於字符數組將包含終止字符。

+2

'char * pa = ..'也使得它不可修改,而'char a [] = ...;'是可修改的。 – hmjd