• ベストアンサー

?と: の意味がわかりません

あるCサンプルプログラムを見たのですが、意味がわからないところがあります。 初期化の処理で char *str=(strrchr(argv[0],'/'))?strrchr(argv[0],'/')+1:argv[0]; という文がありました。 この文の?(クエスチョン)と:(コロン)が何を意味しているのかわかりません。 そのためどのような初期化がされているのか不明です。 ご存知のかたいましたらご教授ください。 よろしくお願いいたします。

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

  • ベストアンサー
  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.1

A?B:Cというような式があった場合、 Aが真であればB Aが偽であればC が返されます。

tikyuujinkun
質問者

お礼

なるほど。 早速の回答ありがとうございました。 助かります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mallocがうまく動かない

    コマンドライン引数で指定された文字列を逆順に返すプログラムを作るため 下記のようなプログラムを組みました。 ところが変数strの大きさがargv[1]より大きくなってしまいます。 どうすればよいのでしょうか。 #include <stdio.h> #include <stdlib.h> char *mstrrev (char *s); int main(int argc, char *argv[]){ char *str; str = mstrrev(*(argv+1)); printf("%s",str); free(str); } char *mstrrev (char *s){ int length,i; char *str; for(length=0;*(s+length)!='\0';length++); str = (char *)malloc(sizeof(char)*length); for(i=0;i<length;i++){ str[i] = s[length-1-i]; } return str; }

  • エラーの意味

    このプログラムは、三番目のコマンドライン引数に、 watch が入力されると、画面に文字表示されるはずですが、 おそらく if ( argv [3] == 'a' ) putchar ( c ) のところで、エラーが出ます。 文字列定数は 、1 文字か 2 文字でなければならない ( 関数 main ( int,char * * ) ) ' int ' 型は 、' char * ' 型に変換できない ( 関数 main ( int,char * * ) ) このエラーの意味が解らないのですが、何を伝えたいのか解説をお願いします。 int main(int argc,char *argv[]) { FILE *fp ,*fp1; int c; fp=fopen(argv[1],"r"); if(argv[1]==NULL){ printf("no open"); exit(1); } fp1=fopen(argv[2],"w"); if(argv[2]==NULL){ printf("no open"); exit(1); } while ( ( c=fgetc ( fp ) ) !=EOF ) { fputc ( c , fp1 ) ; if ( argv[3] == ' watch ' ) putchar ( c ) ; }

  • プログラムによく出てくるstrの意味

    プログラムによく出てくるstrの意味はなんですか? 数学でよくpやrを使いますがそれと同じようなものでしょうか? 例:char str[] = "COMPUTER";

  • 文字列の関数引渡しについて

    呼び出す関数が int sample(char *moji)となります。 呼び出しもとで1、2と記載するのは正しいのでしょうか? 1. char *c[SIZE]; *c = DialogBox1->FileName.c_str(); /*FileNameは abcde */ sample(*c); 2. sample("abcde"); 3. char *c[SIZE]="abcde"; sample(c); 4. char *c[SIZE]; c = "abcde"; sample(c); 呼び出す関数にはアドレスを渡すものと思っているのですが 3や4は正しいのでしょうか? また間違っているものやおかしい使い方などが あれば教えていただけないでしょうか。 それぞれの番号の処理について教えていただければ 幸いです。

  • ポインタについての質問など

    (1) プログラム引数を取る時の記述ですが…. (int argc, char *argv[]) (int argc, char **argv) 本によって記述がまちまちなんです. これらはどう違うのでしょうか? 特に後者の解釈の仕方がいまいち分からないので教えてください. 配列になってないように見えるのですが…. (2) 後者の記述(int argc, char **argv)で書かれたプログラムで ./program.exe okwave と引数を取ったとき,okwaveのoからeまでをfor文やwhile文でたどって何らかの処理をしたいのですが,どうすればいいのでしょうか? (3) ポインタには関係ありませんが,Windowsでncursesは使えないのでしょうか?

  • main(int argc,char **argv[])の意味を教えて下さい

     今晩は、Cの初心者です宜しくお願いします。  main関数の引数で、int main(int argc,char **argv[])とint main(int argc,char *argv[])と書かれている場合がありますが、 「**argv」と「*argv」の意味の違いはどのようなもので、どのように使い分けるのでしょうか。 また、必ずポインタ型でとるという決まりでしょうか。 宜しくお願いします。

  • 次のようにセットされている文字列を出力するプログラムを作成したのですが

    次のようにセットされている文字列を出力するプログラムを作成したのですが、引数を渡すことができません。まだ、初心者でどこがいけないかが分かりません。ご教授をお願いいたします。 int _tmain(int argc, _TCHAR* argv[]) { int a=0; char name_main[50]; set_name(name_main); printf( "セットされている名前は%sです", name_main ); return 0; } void set_name(char *name) { int n=0; char *str=NULL; char str2[50] = "yamada taro"; str = (char*) malloc( sizeof(char) * 50); memcpy( str, str2, 50 );

  • C++でSTLを使った文字列操作

    C++素人です。 第一引数で指定するファイルパスの 拡張子を.datに変更する関数を作っていますがうまくいきません。 STLの使い方が悪いのでしょうか? #include <string.h> using namespace std; char *exchange(const char *fname) { char *file; char *ex; string str; str = fname; ex = ".dat"; str.erase(str.find_last_of('.')+1); file = strcat(str, ex); return file; } int main(int argc, char *argv[]) { char *file = exchange(argv[1]); return 0; }

  • 二行目の*の意味を教えてください。

    #include <stdio.h> int main(int argc, char *argv[]) { int i; for ( i = 0; i < argc; i++ ){ printf("argv[%d]=%s\n", i, argv[i]); } return argc; }  以上プログラムで、二行目の*の意味を教えてくさい。  6行目のargvには*が付いていません!?  よろしくお願いします。

  • 文字列strの中から文字cを探すプログラム(C言語)がわからない

    文字列strの中から文字cを探すプログラム(C言語)がわからない 柴田望洋さんの「[新版]明解C言語」という本の演習11-2なんですがどうしてもわかりません。間違いは無いと思うのにコンパイルすると警告を吐かれます。 僕が書いたプログラムを載せます。 /* 文字列strの中に、文字cが含まれていれば(複数ある場合は、最も先頭側とする)、 その文字へのポインタを返し、含まれていなければNULLを返す関数 char *str_chr(const char *str, int c) {} を作成せよ。 */ #include<stdio.h> char *str_chr(const char *str, int c){ while(*str){ if(*str==c) return str; str++; }     return NULL; } int main(){ char *str; char c; scanf("%s",str); scanf(" %c",c);     printf("%d",str_chr(str,c)); return 0; } コンパイラは「関数str_chrのif分の中のreturn strの型変換に問題がある」と言っているんです。 型変換はしるつもりは無いのにコンパイラはなぜそのように認識するのでしょうか。 またネット答えを探しましたがどうやらこのreturn strの部分はreturn (char*)strが正解のようです。意味がわかりません。strはポインタなのになぜまたわざわざchar型に変換しているのですか?といか(char*)の意味が根本的にわかりません。 質問ばかりですみません。初心者でポインタがどうにも理解できないんです。 誰か詳しい人教えてください。 お願いします。