コマンドラインの問題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あるす

コマンドラインの問題

#1

投稿記事 by あるす » 10年前

こんにちわ。
演習問題で分からない箇所があったので質問させていただきます。

問プログラ起動時にパラメータとして与えられるnこの文字列を連結して表示
但し、標準関数はつかわない

Main(int argc,char*argv[])

お願いします。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: コマンドラインの問題

#2

投稿記事 by みけCAT » 10年前

課題の丸投げは禁止なので、途中まで書いたプログラムがあれば貼っていただけるとありがたいです。

言語も環境も指定されていないようですね。とりあえずC言語と仮定します。

例えば、x86、32ビットのLinux、gccであれば、インラインアセンブラでシステムコールを呼び出すことで、標準関数をつかわずに標準出力に文字列を書き出せます。
標準出力に文字列を書き出せば、(リダイレクトなどの小細工をせず、端末(エミュレータ)上のシェルからプログラムを起動したのであれば)多くの場合表示されるはずです。
サンプルプログラムです。

コード:

/* システムコールを使用してstrを標準出力に書き出す(EINTRなどへの対応は省略) */
void print_using_write(const char *str) {
	asm volatile (
		"mov $4, %%eax\n\t" /* write */
		"mov $1, %%ebx\n\t" /* 標準出力 */
		"mov %0, %%ecx\n\t" /* 出力する内容へのポインタ */
		"xor %%edx, %%edx\n\t" /* 文字列の長さを計算する */
		"1:\n\t"
		"testb $0xff, (%%ecx, %%edx)\n\t"
		"jz 2f\n\t"
		"inc %%edx\n\t"
		"jmp 1b\n\t"
		"2:\n\t"
		"int $0x80\n\t" /* システムコール呼び出し */
	:: "m"(str) : "%eax", "%ebx", "%ecx", "%edx");
}

int
Main(int argc,char*argv[])
{
	(void)argc; /* 警告避け */
	(void)argv; /* 警告避け */
	print_using_write("hello, world");
	print_using_write("\n");
	return 0;
}

int main(int asumi_kana, char **sakura_ayane) {
	return Main(asumi_kana, sakura_ayane);
}
https://ideone.com/PscfnU

Windowsの場合は、標準でないGTK+などの関数をつかって表示するといいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る