- 締切済み
printf()関数の括弧を二重にして、printf((~~~))とし
printf()関数の括弧を二重にして、printf((~~~))として コンパイル/実行すると、実行時セグメンテーション違反が発生します。 コンパイル時には警告も発生しますが、このセグメンテーション違反が なぜ起こるのか理由がよくわかりません。ご回答いただけるとありがたいです。 以下、サンプルコードと実行例です。よろしくお願いいたします。 ---mytest.c---- 1 #include <stdio.h> 2 3 int main(void){ 4 5 //printf("test:%d", 1)ではもちろんコンパイル/実行に成功する。 6 printf(("test:%d", 1)); 7 return 0; 8 } 【コンパイル/実行結果/gccバージョン】 #gcc main.c main.c:6:警告:passing argument 1 of printf makes pointer from integer without a cast #./a.out セグメンテーション違反です # gcc --version gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-27) ・ ・
- akkn2010
- お礼率81% (9/11)
- C・C++・C#
- 回答数1
- ありがとう数7
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- poppyday
- ベストアンサー率56% (164/290)
printfの第1引数が("test:%d", 1)であると判断されます。 この「("test:%d", 1)」はカンマ演算子の式と解釈され、式の値は1になります。 第1引数は、文字列定数へのポインタを期待しているところに1が与えられますから、アドレス1をアクセスする結果となりセグメンテーション違反となります。
関連するQ&A
- printf scanf が、反応しません。
printf scanf が、反応しません。 #include <stdio.h> int main(void) { int num = 0; int sum = 0; printf("テストの点数を入力してください。(0で終了)\n"); do{ scanf("%d", &num); sum += num; }while(num); printf("テストの合計点は%d点です。\n", sum); return 0; } C:\WORK>gcc test1.c C:\WORK>gcc -o test1 test1.c おかしいです。 打開策を教えてください。 ご多忙中恐れ入ります。 ご回答のほど、宜しくお願い申し上げます。
- ベストアンサー
- C・C++・C#
- printf("%lf",5/3); は 0.000000 ?
Cを勉強中です。 main(){ printf("%lf",5/3); } をBorland C++ 5.5.1コンパイラで コンパイルして実行すると、 0.000000 と表示されてしまいます 1.666666 と表示するには、何が足りないのでしょうか。
- ベストアンサー
- C・C++・C#
- セグメンテーション違反について
C言語であるプログラムを作っています。コンパイルは上手くできるのですが、実行するとセグメンテーション違反と出てしまいます。それもセグメンテーション違反と出るときと出ないときがあり困っています。そこでプログラム中のどこがセグメンテーション違反を指しているのか知りたいのですが、何かセグメンテーション違反の場所を教えてくれるようなオプションはないでしょうか? プログラムソースを見てもらうのが一番いいと思いますが、行数が1000行を超えているので断念しました。OSはLinuxでコンパイラはgccです。どなたかご教授お願いします。
- ベストアンサー
- C・C++・C#
- C90とC99の計算結果の違い?
C言語の質問です。 gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12) 以下のプログラムをgccでコンパイル・実行すると(1)に入り,"a"が出力されます。unsigned intの計算なのでラップアラウンドが生じtest=4294716272となるのは私の期待どおりです。 ただ、gcc -std=c99でコンパイル・実行すると(2)に入り,"b"が出力されました。c99でコンパイル・実行すると計算結果がなぜ異なっているのかが分かりません。 long test = 0; unsigned int x = 184; unsigned int y = 251208; test = (x-y); if(test == 4294716272){ printf("a");// (1) }else if(test == -251024){ printf("b"); // (2) }
- ベストアンサー
- C・C++・C#
- なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのか
なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのでしょうか。 暗黙にインクルードされるヘッダと されないヘッダファイルの差分等あれば教えていただきたく。。 // main.c int main(){ printf("SWSW\n") ; return 0 ; } % gcc main.c % ./a.out SWSW
- ベストアンサー
- C・C++・C#
- printf() だけで文字列を表示できる??
1: int printf(char *, ...); 2: main() 3: { 4: printf("Hello, world.\n"); 5: } C で書かれた上のプログラムが正常にコンパイルでき、しかもHello, world. と表示することが理解できません。どなたか教えていただけないでしょうか。 1行目でprintf のプロトタイプ宣言を書き、その実体は書いていません。これをコンパイルしたとき、「printf() は知らない」と言われると思いましたが、そうはならず、Hello, world. を表示しました。 また、1行目の関数宣言の引数を変更すると、「ビルトイン関数と型が一致しない」と言われます。その「ビルトイン関数」というのは文字通りビルトインされていて任意に使用できるようになっているのでしょうか。 コンパイラはgcc version 3.4.4 です。
- 締切済み
- C・C++・C#
- printf scanf が、反応しません。
#include <stdio.h> /*構造体struct carの宣言*/ struct Car{ int num; double gas; }; int main(void) { struct Car car1; printf("ナンバーを入力してください。\n"); scanf("%d", &car1.num ); printf("ガソリン量を入力してください。\n" ); scanf("%lf, &car1.gas"); printf("車のナンバーは%d:ガソリン量は%fです。\n", car1.num,car1.gas); return 0; } C:\WORK>gcc test18.c C:\WORK>gcc -o test18 test18.c いつも教えて頂き、誠にありがとうございます。 上記の件。 println scanfが反応しません。 どうすればいいでしょうか? ご回答のほど、宜しくお願い申し上げます。
- ベストアンサー
- C・C++・C#
- cygwinのgccで正常にコンパイルできない。
cygwinのgccで正常にコンパイルできない。 cygwinのvimで、以下のプログラムを書きました。 ------------------------------------------------------------- #include <stdio.h> int main(void) { int no; printf("Please input something:"); scanf("%d", &no); printf("It is %d that you input it:\n", no); return (0); } ------------------------------------------------------------- それからgccでコンパイルしました。 コマンドは以下の通りです。 $ gcc test.c すると以下のエラーが出ました。 test.c:10:9: warning: unknown escape sequence: '\033' このようにコンパイルできない状態です。 どのようにすると正常にコンパイルできるようになるでしょうか?
- ベストアンサー
- C・C++・C#
- printfでSegmentation fault
gccでプログラムを作っています。 分割コンパイルを試していたのですが、 printf("a"); なら正常なのに、 i=1; printf("%d",i); とするとSegmentation faultになります。 printf("%f",0.1); とかも無理です。 分かる方がいらっしゃいましたらお願いします。
- ベストアンサー
- C・C++・C#
- セグメンテーション違反とは??
linuxでC言語のプログラムを構築しています。 gccでコンパイルしたときにセグメンテーション違反という エラーが出てしまいます。 セグメンテーション違反とは一体なんの ことなんでしょうか? メモリのことだと思ってるんですが、原因がよくわかりません。C言語初心者なので わかりやすく教えて頂けるとありがたいです。
- ベストアンサー
- C・C++・C#