質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.84%

  • C

    3201questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

cのコマンドライン引数について

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 168

masuter0413

score 7

c言語でコマンドプロンプトで次のファイル
<cp pro3_5 - 1.txt>
//////////内容//////////////
a long time ago,
Therebwas alittle girl.
//////////////////////////
を指定して次のコードを実行したいです。

#include <stdio.h>
#include<string.h>

int main(int argc, char *argv[])
{

    char ch;
    FILE *fp;
    if (argc != 2) {
        printf("パラメータの数が違います。\n");
        return 1;
    }
    fp = fopen(argv[1], "r");
    if (fp == NULL) {
        printf("ファイル名が不当です。\n");
        return 1;
    }
    while ((ch = fgetc(fp)) != EOF) {
        putchar(ch);
    }

    fclose(fp);
    return 0;
}


visualStudioだと、コマンドプロンプトで簡単にファイル名を指定可能なのですが、現在、putty(vim?)をつかってプログラミングしています。
どのようにしてファイル名を指定すればいいでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • pepperleaf

    2018/05/23 23:09

    puttyという事は、Linuxにリモートログインしているという事でしょうか? そこで、vimを使ってソースコードの編集を行っている? 環境を明記した方が良いと思います。リモートログインならば、シェルが動いていると思うので、単にそこでコマンドプロンプトの場合と同様に実行すれば、良いだけでは? なお、プログラム名の先頭に "./" を付けないとNGな場合もあるので注意。

    キャンセル

回答 3

checkベストアンサー

0

環境についての記載がありませんが、気になった事も合わせて以下に書いてみます。

コンパイル環境として、Linuxを使っているかと思います。
今まで、Windowsでは、コマンドプロンプトから、コンパイル実行してきたのでしょうか? その場合、以下のようなコマンドライン?

cl [プログラム名].c

とすると、出力ファイルは、 [プログラム名].exe となって、実行は、

[プログラム名]

で実行できます。 Linuxでは、シェルから、
$ gcc [プログラム名]

でしょうか? (オプション指定無しの場合)  この場合、実行は、
$ ./a.out
になります。

なお、ソースコードの fgetc() の件は、fgetc()の戻り値が int で、EOFもintなので、 int ch; が正しいという事です。 あるいは、 feof() を使えば、ファイルの終わりを判定できます。 (ただし、最後の一文字を読み込んだ後)

また、unicode 云々の話もあり、fgetc()は、(俗に言う)半角英数字のみで使った方が良いです。漢字でも使えますが、文字コード云々の話があり、簡単ではありません。

以上、参考になれば。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

exename "cp pro3_5 - 1.txt"

exename:実行ファイルの名前
でいいかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

直接の回答ではありませんが気になったので・・・
char ch; は(ch = fgetc(fp)) != EOF の判定でおかしくなりますよd^^ int ch;と宣言しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/23 23:11

    fgetc() の戻り値が int で、EOF が int と言うことですね。明記しないと知らない人も多いのでは?
    ただ、大抵の場合、char は符号付なので、動くのじゃなかったでしょうか。

    キャンセル

  • 2018/05/23 23:23

    符号付、無しの問題ではありません。EOFの値を1バイトに切り詰めると、文字コードと重複する危険性があります。例えばUnicodeの一部の文字は0xffを含む2バイトで表現されます。EOFが0xffffffffであるとして、切り詰められると0xffとなりますので重複します。もっとも、UnicodeテキストならばテキストヘッダとしてBOMが埋め込まれるので、本文以前にBOMの読み込みで異常が発生するはずですけどね。

    キャンセル

  • 2018/05/24 19:52

    文字コードとの重複は分かっています。
    しかし、質問者さんの環境とか、使われている(と思われる)文字範囲を考えたら、大きな問題ではないかと。
    それよりも、なぜ、ダメか書かないと分からない人多数の予感。
    また、feof() を勧めるべきかも。

    キャンセル

  • 2018/05/24 20:30

    ええっと、ひとの回答に不満があるなら、「あなた自身」が回答なさってはどうでしょうか?

    キャンセル

  • 2018/05/24 20:59

    えっと、よくわからないのですが・・・
    自分がプログラムで使う関数の仕様って、確認して使うんじゃないですか?
    分からないで使ったらデバッグなんかできないですよね?

    キャンセル

  • 2018/05/24 22:49

    > y_waiwaiさん、
    回答に関する疑問点を提示しました。それに対する指摘は、回答者でない方です。なお、元の質問へ質問をコメントしています。
    > cateyaさん、
    普通、確認して使うものですが、確認していないから、間違えると思います。特に、EOFの件は、良く聞く(見る)話なので、コメントしました。

    キャンセル

  • 2018/05/27 09:20

    らじゃ v^^
    ・・・確かに多いよね・・・なんでだろう??;
    t.c:18:18: warning: implicit conversion loses integer precision: 'int' to 'char' [-Wconversion]
    while ((ch = fgetc(fp)) != EOF) {
    ~ ^~~~~~~~~
    1 warning generated.

    コンパイラが教えてくれるのに・・・

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3201questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。