![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
textファイルをいくつかに分割して保存しようと思い、以下のプログラムを作りましたが、うまくいきません。
予定では "0000.txt", "0001.txt", ....と文字列を生成するはずです。
#include <stdio.h>
#include <string.h>
#define LENGTH 4//番号の桁数
void filename(int n)
{
char name[LENGTH +4 +1];
char text[5] = ".txt";
int i;
for(i = 0; i <= LENGTH; i++)
name[i] = '0';
i = LENGTH;
//自然数を文字列に変換
do{
name[i] = (char)(n%10 + 48);
i--;
n /= 10;
}while(n != 0 && i >= 0);
strcat(name, text);
printf("filename:%s", name);
}
int main(void)
{
int i;
for(i = 0; i < 5; i++){
filename(i);
printf("\n");
}
return 0;
}
実行結果は
filename:00000@.txt
filename:00001.txt
filename:00002.txt
filename:00003.txt
filename:00004.txt
このように、文字化けしています。
何が原因なのでしょうか。
よろしくお願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?e8efa67)
No.4ベストアンサー
- 回答日時:
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define LENGTH 4 //番号の桁数
void filename(int n)
{
char name[LENGTH+4+1];
sprintf(name,"%05d\.txt",n);
printf("filename:%s", name);
}
int main(void)
{
int i,j;
for(i = 0; i < 5; i++)
{
j = i;
filename(j);
printf("\n");
}
return 0;
}
これでスッキリするはずです。
ループ変数iをそのまま引数に使うことは是非避けたいところです。(#3さんのご意見に賛成)
No.3
- 回答日時:
0の時に特別な処理をしているから1から与えれば
いいと思います。
まあ、name[4] = '\0'; をどこかに入れてたらい
いんじゃないですか?せっかく余分に1バイト持っ
ているのだから。
しかし、引数を書換える恐るべき副作用を持った
関数ですね。まあ、値渡しだからこと無きになっ
ていますが、このようなコードは精神衛生によく
無いですね。
No.1
- 回答日時:
/*
C#やJavaの文字列ではNULLで閉じるって概念があまりないので自信ないけど,ヒントにはなるんじゃないかと。
*/
#include <stdio.h>
#include <string.h>
#define LENGTH 4 //番号の桁数
void filename(int n)
{
char name[LENGTH +4 +1];
char text[5] = ".txt";
int i;
for(i = 0; i < LENGTH; i++){ // 0から4までじゃなくて0から3までの4つ
name[i] = '0';
}
name[LENGTH] = '\0'; // NULLで閉じてみた(俺の環境だとwが余計に付いたため)
i = LENGTH - 1; //同様に 3から0まで4つ。
//自然数を文字列に変換
do{
name[i] = (char)( n%10 + 48);
i--;
n /= 10;
}while(n != 0 && i >= 0);
strcat(name, text);
printf("filename:%s", name);
}
int main(void)
{
int i;
for(i = 0; i < 5; i++){
filename(i);
printf("\n");
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
csvファイルからの読み込みがス...
-
半角カナ→16進
-
C言語の質問です
-
カラー画像からグレースケール...
-
switch文で文字を比較すること...
-
文字列の比較について
-
3桁区切(コンマ)記号をつけ...
-
charでの計算?
-
C言語で文字列操作を忘れてしま...
-
干支のプログラム
-
fgetsなどのときのstdinのバッ...
-
char型からのバイト数取得
-
c言語についての質問です。
-
int main()の・・・
-
charからLPTSTRへの変換方法
-
[C++]ファイル出力について
-
c言語の文字列の逆順のプログラ...
-
CStringをwchar_tに変換したい
-
C++の関数テンプレートで分から...
-
文字列について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
テキストデータをそのままバイ...
-
charでの計算?
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
2曲同時再生するにはどうした...
-
C言語の入力した文字を反転させ...
-
配列をnビットシフトする
-
3桁区切(コンマ)記号をつけ...
-
int main()の・・・
-
型変換
-
CStringをwchar_tに変換したい
-
'const char *' 型は 'char *' ...
-
間接操作のレベルとは
-
double型の値をchar配列に変換...
-
絶対パスからのファイル名の切...
-
switch文で文字を比較すること...
-
c++ 文字列を入力して、一文字...
おすすめ情報