Shinonome Programming

プログラミングで覚えておきたいものを書き残します.

Windowsのバッチファイル

 テキストファイルを、拡張子.cmd,または.batで保存します。その後、適当なディレクトリに保存して、環境パスを通せば、どこでも実行できるようになります。

 文字コードを切り替えるバッチファイルを用意しておけばすぐに文字コードを変更できるので便利です。

コマンドプロンプト文字コードutf-8に変更するバッチファイル

@echo off
setlocal
rem 文字コードをutf-8に変更するバッチです。
chcp 65001

 

コマンドプロンプト文字コードshift-jisに変更するバッチファイル

@echo off
rem 文字コードをshift_jisに変更するバッチです。
chcp 932

 

GCCコンパイルした後に実行までするバッチファイル

 gccコンパイルするときに、ファイル名から拡張子を取り除いた名前の実行ファイルを生成します。その後、実行するようにします。

@echo off
rem gccのコンパイルオプション
rem gcc ファイル名.c -o ファイル名
rem でコンパイルした後、実行するバッチです。

rem 使い方:gcc ファイル名.c 
gcc %1 -o %~n1
%~n1

2次元配列のメモリ領域の動的確保(C言語)

 変数宣言と初期化
int idata[3][2] = {};
と同じことをやろうとしています。

ソースコード


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

int main(int argc, char const *argv[]) {
  int **idata;
  int length,side;
  int i,j;
  length = 3;
  side = 2;
  idata = calloc(length,sizeof(int *));
  for(i = 0;i < length;i++){
    idata[i] = calloc(side,sizeof(int));
  }

  for(i = 0;i < length;i++){
    for(j = 0;j < side;j++){
      printf("idata[%d][%d]:%d\n",i,j,idata[i][j]);
    }
  }

  for(i = 0;i < length;i++){
      free(idata[i]);
  }
  free(idata);
  return 0;
}

実行結果


idata[0][0]:0
idata[0][1]:0
idata[1][0]:0
idata[1][1]:0
idata[2][0]:0
idata[2][1]:0

はじめてのはてなブログ

このブログについて

 主にプログラミングで私が書き残しておきたいものを書いていきます。間違いがあれば指摘いただけると助かります。

ファイル名を変更するプログラム(C言語)

 Windowsではrenameまたはrenコマンドでファイル名を変更できますが、それを次のプログラムで実現してみます。

f_rename.c


/*

使い方:

1.コマンドライン引数から操作する場合
f_raname 変更前のファイル名 変更後のファイル名

2.

*/

#include <stdio.h>
#define FILENAMELENGTH 260

/*ファイルを開けなかった場合は1,開いた場合は0を返す*/
int searchFile(FILE *fp,const char *filename)
{
  if((fp = fopen(filename,"r")) == NULL) {
    return 0; //ファイルを開けなった(ファイルがなかったことにする)
  } else {
    fclose(fp);
    return 1; //ファイルを開けた
  }
}

int renameFile(FILE *fp,const char *prefilename,const char *filename)
{
  if(searchFile(fp,filename)){
    printf("ファイル名が被りました。ファイル名の変更は行いません。\n");
    return 1; //変更後のファイル名が既存のファイル名と被った
  }

  if(rename(prefilename,filename) == 0){
    printf("ファイル名の変更に成功しました。\n");
    return 0; //ファイル名変更成功
  } else {
    printf("ファイル名の変更に失敗しました。\n");
    return 1; //ファイル名変更失敗
  }
}

int main(int argc, char const *argv[]) {
  FILE *fp;
  char prefilename[FILENAMELENGTH];
  char filename[FILENAMELENGTH];

  if(argc == 3) {  //コマンドライン引数を受け取った場合
    renameFile(fp,argv[1],argv[2]);
    return 0;
  } else if(argc > 3){
    printf("コマンドライン引数が多すぎます。\n\n");
  }

  printf("変更前のファイル名:");
  scanf("%s",prefilename);
  if(!searchFile(fp,prefilename)){
    printf("その名前のファイルは存在しません。プログラムを終了します。\n");
    return 1;
  }

  printf("変更後のファイル名:");
  scanf("%s",filename);
  renameFile(fp,prefilename,filename);

  printf("プログラムを終了します。\n");
  return 0;
}