[解決済み] 以前の 'function' の宣言は C のここ [重複] であった。
2022-01-29 02:21:29
質問
重複の可能性があります。
K&Rで学ぶC言語、書籍の配列や関数呼び出しのあるプログラムをコンパイルしようとするとエラーが発生する。
Brian W. Kernighan と Dennis M. Ritchie 著の The C Programming Language を学習中、1.9 Character Arrays のセクションの例を試しました。以下はそのコードである。
/* read a set of text lines and print the longest */
#include <stdio.h>
#define MAXLINE 1000 /* maximum input line length */
/* declare functions: getline() and copy() */
int getline(char line[], int maxline);
void copy(char to[], char from[]);
/* getline: read a line into array "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'; /* the null character whose value is 0 */
return i;
}
/* copy: copy 'from' into 'to'; assume to is big enough */
/* the return type of copy is "void" -- no value is returned */
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0') /* terminated with a \0 */
++i;
}
/* print the longest input line */
int main()
{
int len; /* current line length */
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;
}
エラーは主に2つあります。
- error: 'getline' の型が競合しています。
- error: 'getline' の前の宣言はここです。
完全なエラーリストはこちらです。
/Users/C/Codes/Ritchie/array_char.c:8: error: conflicting types for ‘getline’
/usr/include/stdio.h:449: error: previous declaration of ‘getline’ was here
/Users/C/Codes/Ritchie/array_char.c:13: error: conflicting types for ‘getline’
/usr/include/stdio.h:449: error: previous declaration of ‘getline’ was here
/Users/C/Codes/Ritchie/array_char.c: In function ‘getline’:
/Users//C/Codes/Ritchie/array_char.c:17: warning: comparison between pointer and integer
/Users/C/Codes/Ritchie/array_char.c:17: warning: comparison with string literal results in unspecified behavior
本に載っているコードと全く同じなので、何がいけなかったのかよくわかりません。たぶん、冒頭の関数の宣言でしょう。
int getline(char line[], int maxline);
void copy(char to[], char from[]);
は問題ないでしょうか?ありがとうございました。
解決方法は?
http://www.kernel.org/doc/man-pages/online/pages/man3/getline.3.html
getlineはstdio.hにすでに存在しているため、エラーが発生します。関数名をgetline_myのような他の名前に変更してください。
また、16行目では文字と文字列を比較していますね。これは
if(c == '\n')
NOT
if(c == "\n")
関連
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】strcmpが機能しない
-
[解決済み】「無効なイニシャライザー」と表示されるのですが、何が間違っているのでしょうか?
-
[解決済み] struct has no member named
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
-
[解決済み】定義と宣言の違いは何ですか?
-
[解決済み] C言語のポインタ(宣言と単項演算子)を初心者にどう説明するか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開