掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27255

if文がうまくいかない
投稿者---UNIX初心者(2006/06/17 17:38:18)


Cで下のようなプログラムを組んだのですが、

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() {
int i = 0;
int a = 0;
int in[100];
char command[100];
char *com[100];
char *com2[100];
char *string = ".exe";
char seps[] = "|";
char seps2[] = " ";
putenv("PWD=/bin");
while(1) {
printf("<myprompt> ");
scanf("%[^\n]", command);
com[0] = strtok( command, seps );
while(com[i] != NULL) {
com[i+1] = strtok( NULL, seps );
i++;
}
i = 0;
com2[0] = strtok( com[0], seps2 );
while(com2[i] != NULL) {
com2[i+1] = strtok( NULL, seps2 );
i++;
}
if(com2[0] == "exit") {
printf("終了します\n");
exit(0);
}
printf("%s\n", com2[0]);
in[0] = open(com2[0], O_RDONLY);
if(in[0] != -1){
execlp(com2[0], com2[0], com2[1], 0);
} else {
printf("Command not find \n");
}
getchar();
}
}

実行し、コマンドラインに「<myprompt> 」と表示された後、「<myprompt> exit」と入力したのですが、if(com2[0] == "exit") のif文がうまく機能せず、プログラムが終了してくれません。どうすればうまくいくでしょうか。教えてください。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:if文がうまくいかない 27256 Blue 2006/06/17 17:43:01


No.27256

Re:if文がうまくいかない
投稿者---Blue(2006/06/17 17:43:01)


文字列の比較は単純に == でできません。(C言語の基本)
比較用の関数 strcmp あたりを使ってください。


この投稿にコメントする

削除パスワード

No.27257

Re:if文がうまくいかない
投稿者---かんめい(2006/06/17 18:40:03)


>> if(com2[0] == "exit") {
>文字列の比較は単純に == でできません。(C言語の基本)
>比較用の関数 strcmp あたりを使ってください。
もうちょっと説明するなら、com2[0] はcom2[0]のポインタ、"exit" もその文字列が格納されているポインタを示してます。つまりプログラム上のアドレス(ポインタ)が同じか違うかを比較しているのであって、文字列を比較しているわけではないです。
strcmp を使うのが通常と思いますが、勉強の意味で strcmp を自分で作ってみるのも良いかと思います。数行でできます。
がんばってみてください。


この投稿にコメントする

削除パスワード

No.27261

Re:if文がうまくいかない
投稿者---UNIX初心者(2006/06/18 01:00:05)


とても初歩的なミスだったんですね・・・。
教えてくださってありがとうございます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧