Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Ý nghĩa của %n trong printf()

%n là định dạng đặc biệt trong C. Nó không in ra ký tự nào, mà ghi số lượng ký tự đã in được trước đó vào biến con trỏ tương ứng.

Ví dụ 1

#include <stdio.h>
int main() {
    int s;
    printf("Gia tri cua %ns: ", &s); // In 13 ký tự trước %n
    printf("%d", s);
    return 0;
}
Gia tri cua s: 13

Ví dụ 2: Nhiều %n

#include <stdio.h>
int main() {
    int s, m, val;
    int m_val = 28; // Giá trị này bị bỏ qua
    printf("Gia tri cua %ns va %nm %nval: ", &s, &m, &val);
    printf("%d\t%d\t%d", s, m, val);
    return 0;
}
Gia tri cua s va m val: 13  19  21

Giải thích:

  • %n không tính là ký tự in ra.
  • Giá trị biến truyền vào bị bỏ qua; chỉ số ký tự đã in trước %n được ghi.
  • Vị trí %n trong chuỗi định dạng quyết định giá trị ghi.

Ứng dụng: Dùng hiếm, chủ yếu để căn chỉnh đầu ra, tính độ dài chuỗi đã in, hoặc trong một số kỹ thuật bảo mật (format string vulnerability).