Đây là chương trình tôi đang cố chạy thẳng từ phần 1.9 của "Ngôn ngữ lập trình C".Tại sao tôi nhận được lỗi "loại xung đột cho đường biên" khi biên soạn ví dụ dòng dài nhất trong chương 1 của K & R2?
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if (len > max) {
max = len;
copy(longest, line);
}
if (max > 0)
printf("%s", longest);
return 0;
}
int getline(char s[], int lim)
{
int c, i;
for (i=0; i<lim-1 && (c=getchar()) !=EOF && c != '\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
Đây là lỗi tôi nhận được khi tôi cố gắng để biên dịch chương trình sử dụng Ubuntu 11.10:
cc word.c -o word
word.c:4:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
word.c:26:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
make: *** [word] Error 1
Chỉ cần chắc chắn rằng nó không phải là một vấn đề với bản in trong cuốn sách, tôi tham chiếu tập hợp các câu trả lời này để quay lại các bài tập của chương từ cuốn sách (http://users.powernet.co.uk/eton/kandr2/krx1.html) và tôi nhận được một lỗi tương tự khi tôi cố gắng chạy các bài tập 18, 19, 20 , 21, v.v., từ liên kết đó. Thật khó để học khi tôi không thể chạy các chương trình để xem chúng xuất ra như thế nào. Vấn đề này bắt đầu khi giới thiệu các mảng ký tự và các cuộc gọi hàm trong một chương trình. Tôi đánh giá cao bất kỳ lời khuyên nào về vấn đề này.
Đã bỏ qua 20 phút. SHould've chỉ googled –
hahaha tôi quá @ dmtri.com – samrap
** getline() ** là ** không ** chức năng thư viện chuẩn, nó là phần mở rộng, vì @moooeeeep đã nêu rõ hơn và cũng ở đây http: //stackoverflow.com/questions/7376566/can-an-ansi-c-compliant-implementation-include-additional-functions-in-its-stand bởi @Dietrich Epp. Vì vậy, nếu bạn đang viết mã ngày hôm nay, bạn không nên sử dụng 'getline()', nhưng nếu bạn phụ thuộc vào một thư viện đã sử dụng chức năng 'getline()' tự thực hiện của nó thì sao? Tôi nghĩ, theo nghĩa rộng, câu trả lời của @ moooeeeep là phù hợp hơn. –