Tôi đã mã sau:Làm thế nào để đúng printf số nguyên và chuỗi trong c?
char *s1, *s2;
char str[10];
printf("type a string: ");
scanf("%s", str);
s1 = &str[0];
s2 = &str[2];
printf("%s\n", s1);
printf("%s\n", s2);
Khi tôi chạy mã, và nhập vào "A 1" như sau:
type a string: A 1
tôi có kết quả sau:
A
�<�
Tôi đang cố gắng đọc ký tự đầu tiên dưới dạng chuỗi và ký tự thứ ba dưới dạng số nguyên rồi in ra trên màn hình. Nhân vật đầu tiên luôn hoạt động, nhưng màn hình sẽ chỉ hiển thị các nội dung ngẫu nhiên sau đó .... Tôi nên sửa nó như thế nào?
Cảm ơn
Một điều mà mọi người đã không được đề cập một chút: xin đừng scanf vào một bộ đệm giới hạn kích thước. Người dùng có thể dễ dàng chỉ cần nhập nhiều hơn giới hạn và sửa đổi chương trình của bạn. (xem thêm: các cuộc tấn công tràn bộ đệm) –
@DennisMeng: Người ta có thể thêm một bộ định dạng chiều rộng, ví dụ: '% 123s'. Nó vẫn có khả năng nguy hiểm vì chiều rộng đó không bao gồm null terminator. – diapir
@diapir True. Bit quan trọng là tránh tràn bộ đệm. –