[英]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';
它將在換行符的第一個實例處終止字符串。
似乎您使用標准函數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.