使用環境[WindowsXP VC2005 SDK]
char str[6] = {'0','1','\0','2','3','\0'}
↑こういう配列の中身を、↓このように最初の\0の次の値(2)までずらしたいのです。
str[6] = {'2','3,'\0'}
何かいい方法はありますでしょうか・・・。
#include <iostream>
#include <algorithm>
int main() {
const int N = 6;
char str[N] = {'0','1','\0','2','3','\0'};
char* pos = std::find(str, str+N, '\0'); // '\0'を見つけて
std::copy(++pos, str+N, str); // その次から末端までを先頭にコピー
std::cout << '[' << str << ']' << std::endl;
return 0;
}
C++を使わないなら、memcpyを使って下のように。
(コピー先とコピー元の領域が重なることがあるなら
memcpyをmemmoveに置き換えてください)
//-----
#include <stdio.h>
#include <string.h>
int main(void)
{
int i;
char str[6] = {'0','1','\0','2','3','\0'};
// ナル文字の位置を探る
for (i = 0; i < 6; i++) {
if (str[i] == '\0') break;
}
i++;
// ナル文字以降の文字列をずらす。
memcpy(str, str+i, (6-i)*sizeof(char));
// 確認
for (i = 0; i < 6; i++) {
printf([%d] %c\n, i, str[i]);
}
return 0;
}
επιστημηさま reshiaさま
すぐにそういうコードが書けて、うらやましい限りです。
おかげさまで、実装できました。
どうもありがとうございました!
解決済みのチェックを忘れていました・・