2012-10-02 123 views
12

請採取如下:定義字符串,多行

char buffer[512]; 

memset(buffer, 0, sizeof(buffer)); 
sprintf(&buffer[0],"This Is The Longest String In the World that in text goes on and.."); 

printf("Buffer:%s\r\n",buffer); 

我希望能夠創建這種字符串的多行,爲便於故障排除和編輯。但是,當我使用\命令時,我的輸出被顯示爲標籤的內容分開了?

實施例:

sprintf(&buffer[0],"This Is The\ 
    Longest String In the World\ 
    that in text goes on and.."); 

產生的輸出:

Buffer:This Is The  Longest String In the World  that in text goes on and.. 

任何想法?這只是嘗試在多行代碼中分解字符串的錯誤方法嗎?

+0

你不應該使用'printf' –

+0

'\ r'爲什麼不能在地球上? – Mawg

+0

[如何在C/Objective-C中跨越多行分割字符串文字?](http://stackoverflow.com/questions/797318/how-to-split-a-string-literal-across-multiple -line-in-c-objective-c) –

回答

19

換行符延續考慮了代碼中的任何空格。

您可以利用字符串字面串聯的可讀性更好:

sprintf(buffer, "This Is The " 
       "Longest String In the World " 
       "that in text goes on and.."); 

使用\你需要在列0開始您的字符串的延續:

sprintf(buffer, "This Is The \ 
Longest String In the World \ 
that in text goes on and.."); 
+1

額頭拍打着。自動標籤已經讓我進入了!感謝您指出這一點,這確實是問題。 – Nanomurf

4

這也將只是工作以及:

char buffer[512]; 
sprintf(&buffer[0], "This is the longest string" 
     "in the world that in text" 
     "goes on and on and on and on ...."); 
printf("%s\n", buffer); 
+0

謝謝,我沒有意識到這會工作。 – Nanomurf

8

雖然這m我似乎很迂腐,在現實世界中我已經有足夠多的時間在其他兩個發佈的答案中遇到以下問題。

  • 兩個貼答案忽視,得到詞語接合 單獨字符串(明顯,第一測試之後)之間的空間。

  • 如果你的字符串是很長,使用snprintf()代替 - 這是稍微 笨拙,但它告訴任何人查看你的代碼,你知道 在代碼維護共同的危險。

  • 如果您的字符串碰巧包含%,您將得到編譯器警告 (好)或隨機分段錯誤(錯誤)。因此,在 使用"%s"或者,也許這種情況下,只是strcpy().(在兩個月的時間,同事可以輕鬆地添加99.9%的消息。)

  • 採用memset(),這是我看到的時候,僅僅是貨物 - 編程 編程。是的,在特殊情況下需要它,但使用 它始終發送錯誤的信息。

  • 最後,爲什麼會有人使用&buffer[0]buffer 會做?

所以總結一下,你的代碼也許應該改爲:

char buffer[512]; 
snprintf(buffer, sizeof buffer, "%s", 
    "This is The Longest String " 
    "In the World that in text " 
    "goes on and on and on and on ...."); 
printf("Buffer:%s\r\n", buffer); 
+1

這些都是非常好的觀點。感謝您花時間製作它們。上面的代碼實際上只是我正在處理的一個示例,但是您在此處列出的所有要點都非常有效。並回答你的最後一個問題:我不是一個優雅的程序員,所以經常依靠暴力。 ><我欣賞反饋! – Nanomurf

+0

@JosephQuinsey我並不認爲這是必要的,儘管你的確注意到了我答案中的不足之處。在這個網站上的目標是很好的問題和答案,每個人都必須站在它的優點上,即使這意味着綜合有用的其他答案,我經常不會引用其他用戶。話雖如此,您評論的意見也對我有用,我也很抱歉。 – pb2q

+0

@ pb2q:謝謝你的優雅迴應。 –