這裏afaik,%s
將繼續打印,直到它終止,即\0
。 %c
如何知道終止並最終只打印一個字符?%c和%s如何在C語言中工作?
回答
%c
和%s
是標準庫中printf()
函數的一部分,不屬於語言本身的一部分。
話雖這麼說,printf()
使用以下%
字符(S),與stdarg功能一起,以確定它會從它的參數讀什麼類型的變量以及它會用它做什麼。 printf()
的高度簡化實現可能如下所示。
特別注意%c
和%s
做不是處理相同類型的參數! %c
涉及char
(即單個字符),而%s
涉及char *
(即指向字符數組的指針,希望以null結尾)。
int printf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt); // Initialize stdargs
const char *p = fmt; // Pointer into the format string
while (*p != '\0') {
char ch = *p++; // Get the next character of the format string
if (ch != '%') { // Not a format character? Just print it
putchar(ch);
continue;
}
char fmt = *p++; // Get the character following the %
if (fmt == 'd') {
int n = va_arg(ap, int);
print_number(n);
if (fmt == 'c') {
char c = va_arg(ap, char);
putchar(c);
} else if (fmt == 's') {
char *str = va_arg(ap, char *);
print_string(str);
} else {
// Unrecognized format character
}
}
va_end(ap);
return n;
}
--->'int c = va_arg(ap,int);的putchar(C);' – mafso 2014-11-03 10:03:27
%c總是打印單個字符。
char x = 'a';
這裏我們有一個需要打印的單個字符。
char x[2] = "a";
在上面的例子中,我們有2個字符之一是'a'
和另一個是'\0'
。
因此,當打印時,我們需要使用%s,以便在遇到字符串末尾的'\ 0'並打印字符串。
字符串格式不是C或語言的特徵。是由C運行時庫提供的工具。
「%c」不需要終止符,因爲它只處理一個字符。
「%s」繼續處理字符,直到遇到以C表示爲'\ 000'(或'\ 0')的ASCII NUL字符。字符串或字符常量中的正斜槓是沒有任何特殊含義的可打印字符。
此外,幾乎所有的C運行時庫在%s
長度提供相當多的控制:
%.123s
處理直至123個字符,如果沒有遇到一個NUL%.*s
需要兩個匹配參數:第一個是一個指定最大字段寬度的整數,第二個是字符指針。例如:printf ("x = %.*s\n", 15, ptr);
%c表示字符,範圍是0×00到0xff(無符號),其是1個字節,一個存儲單元能保存數據的1個字節,%C將打印僅一個存儲器位置的數據,因此終止字符不是必需的。
%s表示字符流意味着它必須從內存位置流中獲取數據,因此它需要終止字符,因此%s需要'\ 0'。
- 1. 在C語言中工作
- 2. `asm()`函數在C語言中是如何工作的?
- 3. 如何使用C語言中的單元測試語言C?
- 4. Pascal和C語言
- 5. C語言不能讓Strcmp工作
- 6. 怎樣的printf%C真的在C語言編程工作
- 7. 如何在C#語言中關閉webform?
- 8. Link C#(C-sharp)和C語言
- 9. 的fscanf(c)中 - %s和%C
- 10. C/C++語言中的Conky
- 11. 如何練習C#語言?
- 12. R語言如何工作
- 13. 如何實現C#random.nextDouble C語言
- 14. 如何在C語言中使用lua中的...操作符
- 15. 在Objective - C語言
- 16. 如何在c語言中在ubuntu上安裝lprotobuf-c
- 17. C語言中的try-catch語句C
- 18. * restrict/* __ restrict__如何在C/C++中工作?
- 19. C語言和小型機
- 20. 的Pthread和C語言
- 21. 範圍和線程本地人如何在(V8's)C++中工作?
- 22. 二維數組跨語言C++和C#
- 23. 在C#中使用SQLite的語用-S
- 24. 如何在C/C++以外的語言中創建COM?
- 25. C++和SDL:SDL_Rect如何工作?
- 26. C# - 如何從語言代碼中獲取語言名稱?
- 27. 如何在C#中表示國家和語言?
- 28. 用c語言
- 29. C語言
- 30. 日曆在C編程語言作業
它總是打印1個字符,不需要魔法 – 2014-11-03 03:42:14
http://man7.org/linux/man-pages/man3/printf.3.html(猜你要問關於'printf'。在這如果您確實應該閱讀文檔,請將其鏈接以便於閱讀。) – Deduplicator 2014-11-03 03:42:44
使用'%c'格式,'printf'不需要知道終止。 – 2014-11-03 03:49:49