C言語のプログラムの出力結果について教えてください

このQ&Aのポイント
  • C言語のプログラムの出力結果について教えてください。
  • プログラムの出力結果の中のbfbff750の意味がわかりません。
  • プログラムの出力結果の中のLINSIZ、B、および4つ目の要素の意味がわかりません。
回答を見る
  • ベストアンサー

c言語の質問です

#include <stdio.h> #define LINSIZ 80 main() { char line[LINSIZ] = "ABCD"; printf("result1 = %x; %x\n", line, &line[0]); printf("result2 = %c; %c; %d\n", *line, line[1], line[4]); } 上記のプログラムの出力結果なのですが result1 = bfbff750; 【1】 result2 = 【2】; 【3】; 【4】 この場合の【1】~【4】を教えてほしいのですがまずbfbff750が分かりません 【1】はAだと思うのですが%xの16進数だとどうなるか分かりません 【2】はLINSIZでしょうか? 【3】はBだと思います 【4】よくわからないです よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#include <stdio.h> #define LINSIZ 80 main() { char line[LINSIZ] = "ABCD"; printf("result1 = %x; %d\n", line, line); printf("result1 = %x; %d\n", &line[0], &line[0]); printf("result2 = %c; %x; %d\n", *line, *line, *line); printf("result2 = %c; %x; %d\n", line[1], line[1], line[1]); printf("result2 = %c; %x; %d\n", line[4], line[4], line[4]); } 実行した結果は、 result1 = 22cc70; 2280560 は、lineのアドレス result1 = 22cc70; 2280560 は、line[0]のアドレス result2 = A; 41; 65 は、line[0]の内容 result2 = B; 42; 66 は、line[1]の内容 result2 = ; 0; 0 は、line[4]の内容

その他の回答 (3)

回答No.4

まじめに回答します。 【1】 : bfbff750 【2】 : A 【3】 : B 【4】 : 0 理由は省略します。

回答No.2

bfbff750はline配列があるメモリー上のアドレスですね。 表示には%xではなく、%pを使うべきだとは思いますが。 > 【1】はAだと思うのですが%xの16進数だとどうなるか分かりません 違います。 そもそも、&ですよ。 > 【2】はLINSIZでしょうか? 違います。 %cですよ。 > 【3】はBだと思います 正解です。 >【4】よくわからないです line[4]がABCDのDの次の値なのはわかりますか? そこには文字列の終端記号が入っていますが、終端記号を表す数値は何でしょう?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

もうちょっとましなタイトルを付けようよと思いつつ, 実行してみればいいのでは?

関連するQ&A

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • C言語でファイルから特定の文字を抽出

    現在C言語でプログラム開発しています。 文字列が並んだテキストファイルから特定の部分のみを抽出したいのですが、うまくいきません。 お力を貸していただけないでしょうか。 テキストファイルの構造はこんな感じです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 文字列 文字列 文字列badresult=*****文字列badresult=*****文字列badresult=*****文字列result=***** ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー これが10セット程記述されたファイルです。 ここから全てのbadresultの数値とresultの数値を抽出したいのです。 私が現段階で作成したプログラムがこちらです。 #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXLINE 2084 int main(void){ FILE *fp; char line[MAXLINE]; char s1[]="badresult"; char s2[]="result="; char *r; if ((fp = fopen( "テキストファイルへのダイレクトパス", "r" )) == NULL){ printf("エラーメッセージB\n"); exit(1); } while (fgets(line, MAXLINE, fp) != NULL){ if(strstr(line,s1)!=NULL){ printf("%.27s",strstr(line, s1),"\n"); printf(" "); printf(strstr(line, s2)); } } } ですがこれだと1行に全てのbadresultが含まれているため、結果は ----------------------------- badresult=***** result=****** ----------------------------- とbadresultは1つしか出てきません。 strstrのポインタをどうにかできないかと考えたのですが、 私のC言語の知識も浅いためなかなかうまくできません。 Cプログラミングに精通している方、どうか改善策を教えていただけないでしょうか。 できればなるべく簡単な方法ですと助かります。

  • C言語 ソートについて

    #include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { } bool is_at(char c) { } void justify(char line[], int n) { } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; } 上の雛形を使って文字列lineに含まれる@以外の文字を文字列の前の方に詰めていくプログラミングを作るという問題を解いていたのですが下のプログラミングまでは出来たのですが最後のjustifyの部分がわかりません 良ければ解答をお願いします #include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { char temp = *a; *a = *b; *b = temp; } bool is_at(char c) { if(c == '@') { return true; } else { return false; } } void justify(char line[], int n) { for(int i=0;i<n-1;i++) { } } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; }

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • C言語の意味

    プログラミングの勉強をしています。 知り合いから,アルファベットの大文字を小文字に変換するプログラムについておしえてもらいました。 #include<stdio.h> #include<ctype.h> #define MCH 3 int main() { char chs[MCH]; printf("アルファベットの大文字を入力して下さい:"); fgets(chs,MCH,stdin); chs[1] = '\0'; printf("小文字は[%c]です。\n",tolower(*chs)); return 0; } この中で, 3行目の#define MCH 3 のdefineの意味 6行目のchar chs[MCH]; のchs・MCHの意味 9行目のchs[1]= '\0'; これ自体の設定がわかりません。 教えてもらえないでしょうか?

  • C言語 ソートについて

    プログラミング初心者です #include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { } bool is_at(char c) { } void justify(char line[], int n) { } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; } 実行結果 abcdefg@@@@@@@@@@@ 上の雛形を用いてような文字列lineに含まれる@以外の文字を前に詰めていく。 ただし配列lineの要素を入れ替えること という問題なのですがいまいちよくわからないので答えを教えていただけると嬉しいです

  • c

    /* char03*/ #include<stdio.h> int main() { char i; for(i='!';i<='~';i++){ printf(%3d(0x%2X)--%c",i,i,i); if((1-'!'+1)%4==0 printf("\n") } printf("\n") return("\n") return 0; } (0x%2X)数字でしょうかなんでしょうか わかりません 助けて下さい

  • C言語

    以下のプログラミングについて。 #include<stdio.h> int main(void) { char ss[6]="ABCDE"; printf("ss[0]=%c\n",ss[0]); printf("ss[1]=%c\n",ss[1]); printf("ss[2]=%c\n",ss[2]); printf("ss[3]=%c\n",ss[3]); printf("ss[4]=%c\n",ss[4]); printf("ss[5]=%c\n",ss[5]); printf("ss=%c\n",ss); return 0; } 以上のプログラミングの出力は、 ss[0]=A ss[1]=B ss[2]=C ss[3]=D ss[4]=E ss=ABCDE となると思うのですが、あってますか? また、 printf("ss[5]=%c\n",ss[5]); は、char文でいうとヌル(ナル)文字の\0の部分に相当すると思うのですが、printf("ss[5]=%c\n",ss[5]);の出力制御はどうなるんですか? ご教授願います。

  • c言語 scanf

    下のソースを実行したらおかしなことになったんですがなんででしょうか?? #include<stdio.h> int main(void){ int i; char c[1000]; for(i=0;;i++){ printf("文字>>>>"); scanf("%c",&c[i]); printf("result = %c \n",c[i]); } } ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓実行↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 文字>>>>a result = a 文字>>>>result = 文字>>>>b result = b 文字>>>>result = 文字>>>>c result = c 文字>>>>result = 文字>>>>d result = d 文字>>>>result = 文字>>>>^C

  • c++

    /* char03*/ #include<stdio.h> int main() { char i; for(i='!';i<='~';i++){ printf(%3d(0x%2X)--%c",i,i,i); if((1-'!'+1)%4==0 printf("\n") } printf("\n") return("\n") return 0; } if((1-'!'+1)%4==0はどういう意味でしょうか

専門家に質問してみよう