C言語を独学しています

double-clutch.
記事: 21
登録日時: 8年前
住所: 近畿

C言語を独学しています

投稿記事 by double-clutch. » 8年前

読み終えた参考書
  『スラスラ わかるC言語』 著 岡嶋 裕史 先生

現在勉強中の参考書
  『独習C 第4判』     著 ハーバート・シルト 訳 トップスタジオ
  『苦しんで覚えるC言語』 著 MMGames
  『アルゴリズムの基礎 第2版』 著 iTEC教育研究開発部

もし この日記を読みに来ている方がいたとしたら、これだけではつまらないので、
以前に書いて、放置している C codeをここで紹介します。

CODE:

#include 
#include 

int main(int argc, char *argv[])
{
	int t_size, // テキスト文字数
		p_size, // 置換前文字列の文字数
		n_size; // 置換後文字列の文字数

	int i,      // 検索開始位置
		j,      // 各種繰り返し処理の制御変数
		k;      // 置換前文字数 と 置換後文字数 の差を保持させる

	char T[80], // テキスト
		 P[30], // 置換前文字列
		 N[30]; // 置換後文字列

	// コマンドライン引数を確認する
	if (argc != 4) {
		fputs("プログラムの使用方法::  \n", stdout);
		return 1;
	}

	// コマンドライン引数の文字列を配列にコピーする
	strcpy(T, argv[1]);
	strcpy(P, argv[2]);
	strcpy(N, argv[3]);

	// 文字数を調べて、それぞれの変数に代入する
	t_size = strlen(argv[1]);
	p_size = strlen(argv[2]);
	n_size = strlen(argv[3]);

	/* それぞれの、char配列とその文字数の確認 */
	//fprintf(stdout, "配列T %s サイズ %d\n", T, t_size);
	//fprintf(stdout, "配列P %s サイズ %d\n", P, p_size);
	//fprintf(stdout, "配列N %s サイズ %d\n", N, n_size);

	i = 0;
	j = 0;
	while (j  p_size - 1) {
		i--;
		if (p_size > n_size) {
			j = i + p_size;
			k = p_size - n_size;
			while (j = i + p_size) {
				T[j + k] = T[j];
				j--;
			}
			t_size += k;
			T[t_size] = '\0';
		}
		j = 0;
		while (j <= n_size -1) {
			T[i + j] = N[j];
			j++;
		}
	}

	fprintf(stdout, "置換処理後の文字配列 %s\nサイズ %d\n", T, strlen(T));



	return 0;
}
  以上のプログラムは、『アルゴリズムの基礎』にて 「文字列置換のアルゴリズム」を学びまして... これを
  『C言語』で実装してみたものです。
最後に編集したユーザー double-clutch. on 2016年5月14日(土) 21:58 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 13年前

RE: C言語を独学しています

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

double-clutch. さんが書きました:

CODE:

	fprintf(stdout, "置換処理後の文字配列 %s\nサイズ %d\n", T, strlen(T));
size_t型であるstrlenの戻り値を、int型が渡されることが期待される%d用のデータとして渡しているので、undefined behaviorです。
size_t型のデータをprintf系の関数で出力するには、%zuを用いるべきです。

double-clutch.
記事: 21
登録日時: 8年前
住所: 近畿

Re: C言語を独学しています

投稿記事 by double-clutch. » 8年前

返信 ありがとうございます。

フォーマット指定子 『%zu』....自分の持ってる参考書には書いてなかったので今すぐには確認できません。
...自分の勉強不足です。

改めまして、ご指摘ありがとうございました。
自分なりに勉強してみます。

YuO
記事: 947
登録日時: 13年前

Re: C言語を独学しています

投稿記事 by YuO » 8年前

過去にこんなtopicがありました。

【雑談】 sizeofの評価結果の出力書式に%dを使っている人はどれぐらいいますか?
http://dixq.net/forum/viewtopic.php?f=3&t=5310

Visual C++では(少なくとも現バージョンでは)z指定子について,明示的に「サポートされない」と書かれているため,
現時点においても上記のトピック中で私が書いたキャストをする,という方法は,現在においても残念ながら有効な方法になっています。
https://msdn.microsoft.com/ja-jp/librar ... .140).aspx

double-clutch.
記事: 21
登録日時: 8年前
住所: 近畿

Re: C言語を独学しています

投稿記事 by double-clutch. » 8年前

to ~ 『YuO』さん 返信 ありがとうございます。

貴重な情報を教えていただいて ありがとうございます。
...感想を述べたいのですが...何分この時間 寝ぼけていて 文章を整えられそうもありません。
後日 頭が比較的動いている時間帯に 感想を述べたいと思います。