文字を右から20文字切り取り – プログラミング – Home

文字を右から20文字切り取り
 
通知
すべてクリア

[解決済] 文字を右から20文字切り取り


roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

文字列の右から20文字を切り取り、ある関数に切り取った文字のポインタを
渡したいと思っています。
このやり方でもいいのですが、
CStringを2回宣言する必要があるなど、無駄な処理が
多くなります。もっとシンプルにできたらいいのですが。。。
もっと簡単なやり方をご存知な方は、ご教授ください。

Func(char *_File)
{
// 文字列
CString Str( _File );
CString Buff;
Buff = Str.Right(20);
Func2( Buff.GetBuffer(0) );
}

開発環境 VC++,MFC


引用未解決
トピックタグ
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 こんな感じ?

void Func(char *_File)
{
// 文字列
Func2(&_File[strlen(_File)-20]);
}

 あと、GetBufferしたらReleaseBufferしましょう。


返信引用
X
 X
(@X)
ゲスト
結合: 22年前
投稿: 7
 

Func(char *_File)
{
// 文字列
CString Buff(_File).Right(20);
Func2( Buff.GetBuffer(0) );
}
これ以上、シンプルにならない気もしますが・・・


返信引用
X
 X
(@X)
ゲスト
結合: 22年前
投稿: 7
 

あ・・・
CStringは使わなくていいのね・・・


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 23年前
投稿: 180
 

Func2に渡したchar*を使って何をしているか
明確でないのでなんともいえませんが、

もし_Fileの文字列を保持しておく必要があり、
Func2内で渡された文字列を変更するならば、

>Func2(&_File[strlen(_File)-20]);
は、ちょっとまずいですね。

でも、
void Func(const char *_File)じゃなくて
void Func(char *_File)だから、いいのかな?


返信引用
roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

NEG(ねぐ)さん、Xさん、とおりすがりさん、ありがとうございます。
基本的にMFCは、使わない方法でやりたいので、
理由は、MFCを使わないほうが、処理速度が速いと思ったからです。

もっと複雑なポインタ位置の計算が必要なのかと思ってました。
すごく単純でいいですね。こんな感じにしようと思います。
>とおりすがりさん
ファイルに書き出す文字列を制限したいだけなので、
大丈夫です。ありがとうございます。

void Func(char *_File)
{
// 文字列(終端コード用に1つ多いサイズ)
char str[21];
// 右から20文字を切り出す
memcpy(str, &_File[strlen(_File)-20], sizeof(str) );
// 関数への引渡し
Func2( str );
//↑ここでは、文字列をファイルに書き出している
}


返信引用
第3水準
 第3水準
(@第3水準)
ゲスト
結合: 23年前
投稿: 17
 

引数char *_Fileの文字列長が20文字より小さい場合、
文字列の先頭より前の領域からmemcpyしてしまいます。

呼び出し側で制御して、
関数に20文字より小さい文字列が渡されないのであれば問題無いと思いますが、
そうでないならば、文字列長をチェックしてやる必要があると思います。


返信引用
roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

長さをチェックするようにします。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました