【掲示板ご利用上の注意】

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

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


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

No.21648

変数に入っている文字列をソース上で使う方法
投稿者---くま(2005/06/25 16:01:35)


はじめまして。現在ちょっと悩んでいるところがあるので、何か解決策があったらご教授願いたいです。

今、問題としているのは、変数に入っている文字列をプログラム中ではなくて、ソースコード中に使いたい、という事です。

細かいところは、省略しますが

char a[100];
scanf("%s",&a);

みたいな、プログラムで変数の中に文字列を入れます。文字列を入れるのは、ファイルからでもかまいません。
上記のscanfにたとえばtestと言う文字列を入れます。
そうなると、char aにはtestが入っていると思います。
そして、問題なのはこのtestと言う文字列をソースコート上で使いたいという所です。

ソース上でtestは配列aに入っている物であり、実際にソースをコンパイルした後に入る情報なので、できるのかどうかもわからないですが、誰かやり方を知っている人が居たらよろしくお願いします。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:変数に入っている文字列をソース上で使う方法 21649 まきじ 2005/06/25 16:14:49


No.21649

Re:変数に入っている文字列をソース上で使う方法
投稿者---まきじ(2005/06/25 16:14:49)


>今、問題としているのは、変数に入っている文字列をプログラム中ではなくて、ソースコード中に使いたい、という事です。

char a[]="int";

int x; じゃなく a x;

みたいな事がしたいのでしょうか?


この投稿にコメントする

削除パスワード

No.21650

Re:変数に入っている文字列をソース上で使う方法
投稿者---くま(2005/06/25 17:00:38)


>>今、問題としているのは、変数に入っている文字列をプログラム中ではなくて、ソースコード中に使いたい、という事です。
>
>char a[]="int";
>
>int x; じゃなく a x;
>
>みたいな事がしたいのでしょうか?

実際の使用用途とは違いますが、やりたいことはそういうことです。
ただ、上記の例だとプログラム中に変数の中身を指定してしまってるので、それでは意味がないです。
外部からscanfやファイルポインタなどを使ってファイルから文字列を読み込む、等の操作によって取得できた文字列をソース上で使いたいということです。

説明下手ですいません^^;



この投稿にコメントする

削除パスワード

No.21651

Re:変数に入っている文字列をソース上で使う方法
投稿者---まきじ(2005/06/25 17:04:58)


>実際の使用用途とは違いますが、やりたいことはそういうことです。

なら、できません。


この投稿にコメントする

削除パスワード

No.21654

Re:変数に入っている文字列をソース上で使う方法
投稿者---くま(2005/06/25 17:18:38)


>>実際の使用用途とは違いますが、やりたいことはそういうことです。
>
>なら、できません。

やはり、無理でしたか・・・。
他のアプローチを考えて見ます。
ご指摘ありがとうございました。


この投稿にコメントする

削除パスワード

No.21655

Re:変数に入っている文字列をソース上で使う方法
投稿者---かずま(2005/06/25 18:08:43)


> 実際の使用用途とは違いますが、やりたいことはそういうことです。

「実際の使用用途」を具体的に書いてくれないと、できるかできないか判断
できませんが、「やりたいこと」と同じ結果になるようなことはできそうです。


この投稿にコメントする

削除パスワード

No.21656

Re:変数に入っている文字列をソース上で使う方法
投稿者---くま(2005/06/25 19:37:55)


>> 実際の使用用途とは違いますが、やりたいことはそういうことです。
>
>「実際の使用用途」を具体的に書いてくれないと、できるかできないか判断
>できませんが、「やりたいこと」と同じ結果になるようなことはできそうです。


OSはfreeBSD4.6を使ってgccでコンパイルしています。
今やりたいと思っていることは、ディレクトリの中にあるファイルのファイル名を取り出してソース上で使い、そのファイルに対する処理をして行きたい、と言うことです。
実際にファイル名一覧を取得するときはsystem関数を使い
system("ls > file");
のようにして一度ファイルに書き出します。その後、ファイルポインタを使って取得したファイル名を変数の中に入れていきます。

変数の中には、ファイル名が入っているわけで、そのファイル名をソースに使いたいのです。
実際は、この変数の中に入っているファイル名でファイルを指定してsystem関数を使い、ファイルに対する処理をする、という形を考えています。


分かりにくいかもしれませんが、どうぞよろしくお願いします。


この投稿にコメントする

削除パスワード

No.21658

Re:変数に入っている文字列をソース上で使う方法
投稿者---まきじ(2005/06/25 19:54:35)


>変数の中には、ファイル名が入っているわけで、そのファイル名をソースに使いたいのです。
>実際は、この変数の中に入っているファイル名でファイルを指定してsystem関数を使い、ファイルに対する処理をする、という形を考えています。

char *fileName="file";
char buf[256];

sprintf(buf,"ls > %s",fileName);
system(buf);

の様な事でしょうか?


この投稿にコメントする

削除パスワード

No.21659

Re:変数に入っている文字列をソース上で使う方法
投稿者---おでん(2005/06/25 20:27:20)


>実際にファイル名一覧を取得するときはsystem関数を使い
>system("ls > file");
>のようにして一度ファイルに書き出します。その後、ファイルポインタを使って取得したファイル名を変数の中に入れていきます。
>
>変数の中には、ファイル名が入っているわけで、そのファイル名をソースに使いたいのです。
>実際は、この変数の中に入っているファイル名でファイルを指定してsystem関数を使い、ファイルに対する処理をする、という形を考えています。
>

system(""ls > file"") ;

FILE * fp= fopen("file","r") ;
while( fgets(buf, sizeof(buf), fp) != NULL ){
ファイル名を取り出してなにかする・・・ということ?
}

※コンパイル中のソースにそのファイルを展開して
 コンパイルさせるのは無理です。


この投稿にコメントする

削除パスワード

No.21661

Re:変数に入っている文字列をソース上で使う方法
投稿者---かずま(2005/06/26 01:02:41)


> 変数の中には、ファイル名が入っているわけで、
> そのファイル名をソースに使いたいのです。
なぜ、そこで「ソース」が出てくるんですか?
変数に入ったファイル名をプログラム中で使えばいいだけです。

プログラムを誤解している人の例を挙げてみます。

fopen("test.txt", "r"); や fopen("data.txt", "r"); でファイルをオープン
できることは知っているが、実行時にファイル名を入力させたい。そこで、
char file[256]; scanf("%s", file); と書いて、実行時に file にファイル名
"hoge.txt" を入力した。このファイル名から fopen("hoge.txt", "r"); という
ソースを作らないと、そのファイルがオープンできない。どうしたら、よいで
しょうか?

この質問は変ですね。もっと極端な例を挙げて見ます。

printf("%d\n", 3 + 5); で足し算の結果を表示できます。でも他の足し算の
結果も表示したい。そこで、int a, b; scanf("%d%d", &a, &b); と書いて、
実行時に変数 a と b に 7 と 9 という値を入力した。これらの変数の値の
足し算をするために printf("%d\n", 7 + 9); というソースを作らなければ
なりません。どうしたらよいでしょう?



この投稿にコメントする

削除パスワード

No.21668

Re:変数に入っている文字列をソース上で使う方法
投稿者---かずま(2005/06/26 23:46:28)


たとえ話だけでは、どうしようもないので、参考となるプログラムを挙げます。
参考になりますか?
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    char file[256];
    system("ls >file");
    fp = fopen("file", "r");
    if (!fp) return 1;
    while (fscanf(fp, "%s", file) == 1)
        if (file[0] != '.') {
            char cmd[256];
            sprintf(cmd, "wc %s\n", file);
            system(cmd);
        }
    fclose(fp);
    return 0;
}

もっと効率のよい方法は、

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main(void)
{
    struct dirent *ep;
    DIR *dp = opendir(".");
    if (!dp) return 1;
    while (ep = readdir(dp))
        if (ep->d_name[0] != '.') {
            char cmd[256];
            sprintf(cmd, "wc %s\n", ep->d_name);
            system(cmd);
        }
    closedir(dp);
    return 0;
}



この投稿にコメントする

削除パスワード

No.21657

Re:変数に入っている文字列をソース上で使う方法
投稿者---おでん(2005/06/25 19:41:05)


>実際の使用用途とは違いますが、やりたいことはそういうことです。

何がしたいかわからないのですが“自己再生プログラム”の範疇かな?
・・・・かなり難しいし、自己再生プログラムは自分自身を書き出すことは
しますがそのまま実行できるものではありません。

「読み込むファイルが変わるたびにコンパイルしていい」ということなら、
#includeですかね?


この投稿にコメントする

削除パスワード

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