2010-02-24 44 views

Trả lời

11

Các a modifier để scanf sẽ không hoạt động nếu bạn đang biên soạn với -std=c99 cờ; đảm bảo bạn không sử dụng.

Nếu bạn có ít nhất phiên bản 2.7 của glibc, bạn có thể và nên sử dụng công cụ sửa đổi m thay cho a.

Ngoài ra, bạn có trách nhiệm giải phóng bộ đệm.

+0

biên dịch với '-ansi' hoặc '--std = c98' hoạt động với scanf ("% as"). –

+2

Một số nền trên cờ 'm', vì tài liệu GCC/glibc không đề cập đến nó: http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html –

+1

Để sử dụng' a' sửa đổi, vượt qua -D_GNU_SOURCE để gcc, nhưng tất nhiên tốt hơn sử dụng 'm'. – amc

0

Tôi đã có kinh nghiệm hạn chế với GCC, nhưng tôi chưa bao giờ thấy một modifier %a cho scanf. Bạn đã thử thay thế %a bằng %s trong dòng thứ ba mà bạn đã cung cấp chưa?

+0

Vui lòng tham khảo liên kết được cung cấp. FYI% c cửa hàng chỉ có 1 char. Tôi đang cố gắng tự động cấp phát bộ nhớ để lưu trữ chuỗi ký tự 0-9a-zA-z hoàn chỉnh. –

+0

Tôi biết những gì '% c' làm - Tôi chỉ bỏ lỡ bit đó. Điều gì sẽ xảy ra khi bạn sử dụng '% s' thay vì'% a'? –

+2

% s sẽ hoạt động nếu bạn đã có bộ nhớ được cấp phát. trong khi% là (có cờ) cấp phát bộ nhớ cần thiết cho * biến mà sau này có thể được giải phóng() –

1

Bạn đã bật tiện ích mở rộng GNU chưa? Tiêu chuẩn C không có tất cả sửa đổi a.

0

'Nhập chuỗi động' với scanf("%as") sẽ hoạt động nếu cờ -ansi hoặc -std=c89 được bật.
Compile sử dụng gcc -ansi

Hoặc nếu không bạn có thể sử dụng scanf("%ms")

Các vấn đề liên quan