簡體   English   中英

如何使用 printf 打印字符串而不打印尾隨換行符

[英]How to print a string using printf without it printing the trailing newline

我正在嘗試使用printf()打印一些字符串,但它們是空終止有尾隨換行符,這與格式混亂:

printf("The string \"%s\" was written onto the file \"%s\"", str, fname);

假設字符串包含"The Racing car." 和文件名是"RandomText1.txt"這打印:

The string "The Racing car.
" was written onto the file "RandomText1.txt
"

但是我希望它只打印一行:

The string "The Racing car." was written onto the file "RandomText1.txt"

我知道我可以修改字符串來擺脫空終止符換行但我想要一種方法,如果可能的話,在不修改字符串的情況下實現這個輸出。

是否可以?

這與空終止符無關。 字符串必須以空字符結尾。

您在這里遇到了尾隨換行符 ( \\n ) 的問題。 在將字符串傳遞給printf()之前,您必須去掉該換行符。

最簡單的方法 [需要修改str ]:您可以使用strcspn()執行此strcspn() 偽代碼:

str[strcspn(str,"\n")] = 0;

如果可能,在不修改字符串的情況下實現此輸出。

是的,也有可能。 在這種情況下,您需要在printf()使用長度修飾符來限制要打印的數組的長度,例如,

printf("%15s", str);  //counting the ending `.` in str as shown

但恕我直言,這不是最好的方法,因為必須知道並固定字符串的長度,否則將無法正常工作。

一個有點靈活的案例,

printf("%.*s", n, str);

其中,必須提供n並且它需要保存要打印的字符串的長度(沒有換行符)

正如已經指出的那樣,C 中的每個字符串都應該以空字符結尾(否則 - printf怎么知道字符串在哪里結束?)

您需要在數組中搜索換行符,大概是使用strchr

嘗試這個:

  char* first_newline = strchr(str, '\n');
  if (first_newline)
      *first_newline = '\0';

它將在換行符的第一個實例處終止字符串。

編輯:看看這個;)

如何僅打印字符串的某些部分?

你只需要打印 'strings lenths - 1' 個字符

似乎您使用標准函數fgets (或其他一些方法)讀取數組str數據,該函數在字符串中還包含與 Enter 鍵對應的換行符'\\n'

你應該刪除這個字符。 這可以通過以下方式完成

size_t n = strlen( str );

if ( n && str[n-1] == '\n' ) str[n-1] = '\0';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM