[英]K&R - Section 1.9 - Character Arrays (concerning the getline function)
[英]K&R 2nd Edition, Example 1.9 Character Arrays
我在以下代碼中有關於getline()函數和參數定義的問題。 代碼直接取自K&R第1.9章:“字符數組”。 我在這里逐字復制。 問題是,當我編譯程序時,我得到三個錯誤,(我在最后復制)。 當我在我得到錯誤的三個地方將函數和函數參數定義更改為get_line()(使用下划線而不是getline)時,錯誤停止並且程序按預期運行。
我的問題是:
#include <stdio.h>
#define MAXLINE 1000 // maximum input line size
int getline(char line[], int maxline);
void copy(char to[], char from[]);
/* print longest input line */
int main()
{
int len; //current line lenght
int max; //maximum length seen so far
char line[MAXLINE]; //current input line
char longest[MAXLINE];//longest line saved here
max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if (len > max) {
max = len;
copy(longest, line);
}
if (max > 0) //there was a line
printf("%s", longest);
return 0;
}
/* getline: read a line into s, return length */
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;
}
/* copy: copy 'from' into 'to'; assume to is big enough */
void copy(char to[],char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0') {
++i;
}
}
我得到的錯誤是:
./section 1.9.1.c:4:5:錯誤:'getline'的沖突類型; int getline(int line[], int maxline);
./section 1.9.1.c:17:40:錯誤:函數調用的參數太少,預期3,有2個while ((len = getline(line, MAXLINE)) > 0);
和
./section 1.9.1.c:30:5:錯誤:'getline'int int getline(int s[], int lim)
沖突類型
與glibc
分發的stdio庫聲明了一個函數,該函數也稱為getline
,其簽名與您的不同。 由於您無法聲明具有相同名稱的兩個函數,因此編譯器會給出錯誤。 在stdio.h中找到的相互沖突的getline
聲明是:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
getline
函數最初是glibc擴展,然后被包含在POSIX.1-2008中。 它不是標准的C函數。
如果您使用的是gcc
,則可以使用-std
命令行開關獲得符合標准的行為。 除此之外,這隱藏了非標准功能的聲明。 試試例子:
gcc -Wall -pedantic -std=c11 "section 1.9.1.c" -o "section 1.9.1"
您的新聲明的getline函數與stdio.h中聲明的getline函數之間會發生沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.