C言語関係掲示板

過去ログ

No.570.ファイル名から拡張子を取り除き出力ファイル名を作成

[戻る] [ホームページ]
No.5228

sscanfを用いた処理について
投稿者---ropetto(2003/02/17 21:01:22)


sscanf()を用いて入力されたファイル名から拡張子を取り除き、
そこから出力ファイル名を作成使用としています。

入力ファイル名:test.dat
作りたい出力ファイル名:test-1.dat

int main(int argc,char **argv){

  char FileName[256];
  char buffer[256];

  sscanf(argv[1],"%s.dat",buffer);

  sprintf(FileName,"%s-1.txt",buffer);

  printf("%s",FileName);

  return 0;

}

このプログラムでは出力ファイル名が
test.dat-1.txt
になってしまいます。どうすればよいのでしょうか?

No.5230

Re:sscanfを用いた処理について
投稿者---お(2003/02/17 21:23:05)


>sprintf(FileName,"%s-1.txt",buffer);

sprintf(FileName,"%s-1.dat",buffer);

No.5231

Re:sscanfを用いた処理について
投稿者---麗(2003/02/17 21:28:26)


>このプログラムでは出力ファイル名が
>test.dat-1.txt
>になってしまいます。どうすればよいのでしょうか?

案としてsscanfの使用をあきらめる、というのはいかが?

#include <stdio.h>

int
main(int argc,char **argv)
{
  char FileName[256];
  char buffer[256];
  char *p_dot = NULL;

  snprintf(buffer, sizeof(buffer), "%s", argv[1]);
  p_dot = strchr(buffer, '.');
  *p_dot = '\0';

  sprintf(FileName,"%s-1.dat",buffer);
  puts(FileName);

  return 0;
}


No.5232

Re:sscanfを用いた処理について
投稿者---ropetto(2003/02/17 21:52:38)


>案としてsscanfの使用をあきらめる、というのはいかが?
アドバイスありがとうございます。
そうですね、早速そちらのほうに変えたいと思います。
sscanf()で処理できればソースも短くてすむと
思ったのですが、どうも%sだと空白か改行があるまで
入力してしまうため、あのような構文ではだめなのかもしれません。


No.5233

Re:sscanfを用いた処理について
投稿者---通りすがりのインフルエンザ(2003/02/17 22:26:37)


こうすればよいのでは?
sscanf(argv[1],"%[^-^.]s", buffer);

おお、笑顔だ・・・ホクロつき・・・。

No.5234

おおおお
投稿者---ropetto(2003/02/17 23:27:41)


>こうすればよいのでは?
>sscanf(argv[1],"%[^-^.]s", buffer);
たしかに!!そうか、正規表現をつかって入力する値を
制限してやればいいんすね。おお、すばらしい、
ありがとうございます。

…でもまた疑問がひとつできてしまいました(-_-;)
sscanf(argv[1],"%[^.].dat",buffer)
みたいに記述してしまってよいのでしょうか?
現在の自分の環境(bcc32)でコンパイルすると正しく動作しています。
どちらでも動くのですが、どちらのほうが正しいのでしょうか?

No.5236

Re:おおおお
投稿者---a"(2003/02/17 23:47:11)


こうした方がいいような
sscanf(argv[1],"%[^.]]",buffer);
strcat(buffer,"-1.dat");/*もちろんbufferに余裕が必要*/