Đoạn mã này hoạt động hơi lạ với khẩu vị của tôi. Xin vui lòng, bất cứ ai quan tâm để giải thích lý do tại sao? Và làm thế nào để buộc '\ n' được hiểu là một char đặc biệt?Giải thích ' n' trong printf ("% s", chuỗi)
[email protected]:~/tmp/user/foo/bar$ ./interpretastring.x "2nd\nstr"
1st
str
2nd\nstr
[email protected]:~/tmp/user/foo/bar$ cat interpretastring.c
#include <stdio.h>
int main(int argc, char **argv)
{
char *s="1st\nstr";
printf("%s\n", s);
printf("%s\n", argv[1]);
return 0;
}
Tóm lại, ý định là chuỗi thứ hai được in thành hai dòng, giống như đầu tiên. Chương trình này đơn giản hóa. Chương trình thực sự có vấn đề đọc từ một tập tin sử dụng fgets
(không phải là một đối số S.O. argv
như ở đây), nhưng tôi nghĩ giải quyết ở đây cũng sẽ giải quyết ở đó.
Thoát dấu gạch chéo có ý nghĩa trong mã nguồn *, nhưng không quan trọng đối với 'printf' cũng như' fgets' cũng như bất kỳ chức năng thư viện thời gian chạy C nào khác. Các đối số dòng lệnh có thể nhận được dấu gạch chéo ngược của chúng được chuyển đổi thành thứ gì đó khác * bằng shell *, nhưng bạn không thể dựa vào điều đó hoặc bạn có thể dựa vào nó phù hợp với trình biên dịch C làm chuỗi ký tự nào. Nếu bạn muốn dịch '\ n' thành ký tự dòng mới trong đầu vào của chương trình, bạn sẽ phải tự làm điều đó bằng tay. – zwol
Cảm ơn bạn. Bình luận rất thích hợp. Có lẽ có chức năng như vậy đã có trong thư viện C rộng lớn? –
Tôi rất tiếc phải nói rằng không có chức năng như vậy. – zwol