
#include <stdio.h>
int main(void){
char a[8],b[7],c[6];
printf("a[8]のアドレスは%pです。\n",&a[8]); //a[8]のメモリアドレスを表示
printf("\n");
printf("b[7]のアドレスは%pです。\n",&b[7]); //b[7]のメモリアドレスを表示
printf("\n");
printf("c[6]のアドレスは%pです。\n",&c[6]); //c[6]のメモリアドレスを表示
printf("\n");
char *c1 ="abcde";
printf("c1=%s\n",c1); //abcdeを表示
printf("c1[2]=%c\n",*(c1+2)); //先頭アドレスの2つ先のアドレスに格納されている値(c)を表示
char c2[] ="abcde";
char *pc2;
printf("c2=%s\n",c2); //abcdeを表示
pc2=&c2[2]; //変数c2[2]のアドレスを格納
printf("c2[2]=%c\n",*pc2); //c2[2]アドレスに格納されている値(c)を表示
char *c="abcdefghijklmn";
char cc[]="opqrstuvwxyz";
printf("%c\n", *(c+7));
printf("%c\n", *(cc+2));
return 0;
}
としてコンパイルした所、
test.c: In function ‘main’:
test.c:31: error: conflicting types for ‘c’
test.c:4: note: previous declaration of ‘c’ was here
と出てしまいました。原因が良く分からないのですが教えて頂けますでしょうか?
No.1ベストアンサー
- 回答日時:
>char a[8],b[7],c[6];
>char *c="abcdefghijklmn";
変数cをダブって定義しようとしているためです。
>test.c:4: note: previous declaration of ‘c’ was here
test.cの4行目 注記:前に定義したcがここにありますよ
って書いてます。
コンパイルエラーの読み方を学びましょう。
偶然出会ったサイトに、そのように書いてありました。
かなり単純でしたね。今度からは気を付けたいと思います。
ありがとうございました
No.4
- 回答日時:
単純に変数cが二重定義ということでしょう。
4行目で、文字配列と定義し、31行目でポインター変数として定義
している為。
31行目のポインター変数名を変えればOK。
後、下記はNGです。
printf("a[8]のアドレスは%pです。\n",&a[8]); //a[8]のメモリアドレスを表示
printf("b[7]のアドレスは%pです。\n",&b[7]); //b[7]のメモリアドレスを表示
printf("c[6]のアドレスは%pです。\n",&c[6]); //c[6]のメモリアドレスを表示
文字配列変数aの添え字は0~7
文字配列変数bの添え字は0~6
文字配列変数cの添え字は0~5
なので定義を変える。
char a[9], b[8], c[7];
またはprintf文を変えなければならないです。
printf("a[7]のアドレスは%pです。\n",&a[7]); //a[7]のメモリアドレスを表示
printf("b[6]のアドレスは%pです。\n",&b[6]); //b[6]のメモリアドレスを表示
printf("c[5]のアドレスは%pです。\n",&c[5]); //c[5]のメモリアドレスを表示
No.3
- 回答日時:
test.c:31: error: conflicting types for ‘c’
test.c:4: note: previous declaration of ‘c’ was here
翻訳すると、
test.cの中で31行目に書かれてるcって名前は衝突してるぜ、オィ!!
test.cの中で4行目に、既にcって名前使ってるよな、オラァ!!
ってところでしょう。
>>test.cの中で31行目に書かれてるcって名前は衝突してるぜ、オィ!!
>>test.cの中で4行目に、既にcって名前使ってるよな、オラァ!!
ってところでした。ありがとうございました。
No.2
- 回答日時:
ざっと見た感じだと、
>char a[8],b[7],c[6];
と
>char *c="abcdefghijklmn";
が多重定義扱いになるんじゃないかな?
それと、利用しているコンパイラによっては変数宣言は全て関数の最初に記載しないといけないものもあるので注意。
偶然出会ったサイトに、そのように書いてありました。
かなり単純でしたね。今度からは気を付けたいと思います。
ありがとうございました
>>それと、利用しているコンパイラによっては変数宣言は全て関数の最初に記載しないといけないものもあるので注意。
そんなのもあるんですね。勉強になりましたありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語初心者の質問失礼します。
C言語・C++・C#
-
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
-
配列を含む構造体の初期値について
C言語・C++・C#
-
-
4
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
5
構造体のextern方法
C言語・C++・C#
-
6
至急です! マクロ定義で #define NUMBER 10とし 関数で max(double ma
C言語・C++・C#
-
7
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
8
C言語での引数の省略方法
C言語・C++・C#
-
9
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
10
2の補数を計算するプログラム
C言語・C++・C#
-
11
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
12
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
13
C言語 関数プロトタイプ宣言の引数に配列を入れたいのですが
C言語・C++・C#
-
14
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
15
main.c:7:43: warning: implicit declaration of func
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の問題です
-
コマンドプロンプトがすぐ消える
-
TeraPadの設定方法
-
*を使ったジグザグのラインをプ...
-
コンパイルエラーについて
-
配列データをExcelファイルとし...
-
wsprintfの書式制御文字列につ...
-
縦の棒グラフ
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
10個出力で改行したいのですが...
-
三角形の判別
-
C言語です このプログラミング...
-
C言語初心者です。次の問題で質...
-
printf、最大値の出し方
-
コンパイルすると『breakの位置...
-
UnixでC言語を学習中(初心者で...
-
空Enterの扱い方
-
cshの文字列操作(0埋め)
-
srand(time(NULL))の使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語でAからZまでを表示する...
-
(C言語)めちゃくちゃな値にな...
-
コマンドラインに出力した文字...
-
コンパイルエラーについて
-
コマンドプロンプトがすぐ消える
-
勝率をプログラムに
-
テキストカーソル位置の取得
-
三角形の判別
-
【C言語教えてください】sin波...
-
4の倍数を論理演算で表す。。
-
C言語で、「自然数nを入力し、n...
-
入力したお金の金額からお札の...
-
cshの文字列操作(0埋め)
-
switch分のケースを範囲数?に...
-
scanfに文字が入力されたときに...
-
プログラミングについての質問です
-
unsigned int型について
-
ダブルポインタで2次元配列を作成
-
円の面積を求めるプログラミン...
おすすめ情報