我正在用c語言編寫代碼。將字符串轉換爲字符串
char a[]={p,r,a,d,e,e,p}
我想在最後添加'0/'
使它字符串。
或者是否有任何方法使其字符串,而不是在最後加入null?char *a=pradeep;
將它轉換爲字符串通過在年底
我正在用c語言編寫代碼。將字符串轉換爲字符串
char a[]={p,r,a,d,e,e,p}
我想在最後添加'0/'
使它字符串。
或者是否有任何方法使其字符串,而不是在最後加入null?
char *a=pradeep;
將它轉換爲字符串通過在年底
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來進行連接,但無論如何你必須確保你有足夠的地方分配。
您不能更改數組的大小a
因此您無法向其添加空終止符。您可以將聲明更改爲:
char a[] = "pradeep";
它將隱式添加空終止符。或者:
char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', 0 };
但字符串文字更簡單,更清晰。大多數(如果不是全部的話)C字符串庫函數都需要一個以空字符結尾的字符串。
你的代碼沒有任何意義,也不會編譯。
字符串字面最好使用字符串文字語法編寫的:
const char *a = "pradeep";
這將包括終止字符,使得在那您可以用任何的字符串處理函數使用C字符串a
點,打印出, 等等。現在
1). char a[]={'p','r','a','d','e','e','p','\0'};
其陣列含有有效字符串。
2). char *a="pradeep";
這會在結尾處自動追加空格以生成有效的字符串。
如果分配一個文本字符串一個字符陣列,編譯器將自動創建與在端部終接'\0'
字符正確的數組:
char a[] = "pradeep";
上面相同書寫
char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', '\0' };
另外,使用陣列是推薦的方式,但上面的第一種替代方案相當於
char *pa = "pradeep";
但是,最後,您不能再使用sizeof
運算符,因爲這將返回指針的大小,而不是字符串的長度。關於sizeof
運算符的另一個注意事項,對於前兩個示例,它將返回數組的大小而不是字符串的長度,即sizeof
對於字符數組將包含終止字符。
'char * pa = ..'也使得它不可修改,而'char a [] = ...;'是可修改的。 – hmjd
其實有一個特例,你可能需要後者。如果您對普通7位ASCII有特殊的擴展名,則不能相信源代碼編輯器中的字體與應用程序具有相同的「擴展ASCII」值。在爲嵌入式顯示器實現符號表時,我遇到過這樣的幾次。解決辦法是輸出ASCII碼而不是符號。使用以前的符號,只能通過添加十六進制值來實現。 - > – Lundin
假設我們要將十六進制值爲0xAA的字符添加到字符串中。如果我們寫「pr \ xAAadeep」,我們會得到一個bug,因爲C字符串文字中的一個十六進制序列只能以非十六進制數字結尾。在這種情況下,編譯器會將AAadee視爲有效的十六進制。所以你的後一個例子逐個字符更安全,不太混亂。 – Lundin
@dystroy,我正在接收一系列字符,將其作爲來自rs232的10個字符。在一個變量中接收到的是字符或一組字符的形式。我想讓他們成爲字符串。 – pradeep