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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

4回答

529閲覧

C言語で、コマンドプロンプトを任意の名前に変える方法

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

1クリップ

投稿2018/01/18 04:02

###前提・実現したいこと
C言語で、コマンドプロンプトをシェルの名前に変えようとしています。

実現したいこと

./hogehoge hogehoge>> hogehoge>>exit //exitと打つと終了

###発生している問題・エラーメッセージ
エラー文によると組み合わせようとしているものが、char*とcharで型が合っていない事が原因だということは分かりました。しかし、">>"がcharと認識されるのは何故なのか、またどのように修正すればいいかわからず困っています。

また、以下のコードだと、「hogehoge>>」と表示されるだけで、コマンドプロンプトの役割は果たせず、実現したいことのように、続けて「exit」と入力しても何も起こらないと考えられます。
この点に関しても改善方法を教えていただきたいです。

trial.c: In function ‘main’: trial.c:5:18: error: invalid operands to binary + (have ‘char *’ and ‘char ’) printf("%d", name + ">>"); ^

###該当のソースコード

c

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(int argc, char *argv[]) { 5 char *name = argv[0]; 6 printf("%d", name + ">>" ); 7}

###補足情報(言語/FW/ツール等のバージョンなど)
ターミナル バージョン2.8

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

printfを次のようにすればよいでしょう。

c

1printf("%s>>", name);

※sscanfのときもそうでしたが、もう少しマニュアルを読むなりして、基礎を学んではいかがでしょうか。

投稿2018/01/18 04:12

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/18 04:30

ご回答いただきましてありがとうございます。 お手数おかけして申し訳ございません。基礎を学んでいるところなので、色々抜けていてすみません。
guest

0

ベストアンサー

今は文字列の連結が足し算でできるんでしたっけ?
strcat を使ってみてはどうですか?
あと %d でなく %s だと思います。
それと C でやらなくてはなりませんか?

【mac】ターミナルのプロンプトの変更

投稿2018/01/18 04:07

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/18 04:32

ご回答いただきましてありがとうございます。 申し訳ございませんが、どうしてもC言語で実装しなければなりません。 実行しましたところ、 ./trial1_18>>% と表示されたのですが、%が消えていないということは、質問でも明記しましたように、このコードではコマンドプロンプトというよりはprintに過ぎないということですよね。
Zuishin

2018/01/18 04:34

そうです。 単に一回文字列を表示して終了しているだけです。 シェルを作るならユーザーの入力を繰り返し受け取ってその文字列を解析してコマンドを実行したりパイプラインをつないだりしなくてはなりません。
退会済みユーザー

退会済みユーザー

2018/01/18 04:38

お返事いただきましてありがとうございます。 どのようにアプローチすべきでしょうか。
Zuishin

2018/01/18 04:41

どうやったら自動車が作れるのか聞いているようなものです。 ここでは到底書ききれないのでモデルとなるシェルのソースを読んでみてください。 ユーザーの入力を繰り返し受け取るだけなら無限ループで scanf かなにかを使ってください。
Zuishin

2018/01/18 04:47

ベストアンサーをもらって何ですが、今回の件に関しては ttyp03 さんの回答が最後の一言も含めてきわめて的確です。
guest

0

もう解決済みになってますが(私が知る限りで)整理します。
1../hogehogeを起動したシェルのプロンプトを変える。
これはCプログラムでは不可能です。セキュリティホールを突く的なことをしない限り、子プロセス(hogehoge)が親プロセス(シェル)を勝手に操作できません。
2. ./hogehogeがキーボード入力を受け付けるときのプロンプトを変える。
これもできません。そもそも入力時にプロンプトを何か出すという機能がCのstdioライブラリにはありません。
3../hogehogeがキーボード入力を受け付けるときに、毎回プロンプトとしての文字列を自力で出力する。
これはできます。

1と同様に、シェルのカレントディレクトリの変更するcdコマンドは自分で同等なものを作ることはできません。

投稿2018/01/18 06:44

a_saitoh

総合スコア702

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もしかして: コマンドプロンプト

Linuxでも同様のコマンドあるよね。フォローよろしく > だれぞ

投稿2018/01/18 06:29

編集2018/01/18 06:30
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問