最初に出てくるコンマより前の部分を消したいです。
「a,b,c,d」が「b,c,d」になって欲しいのです。
以下のようなコードを書きましたがうまくいきませんでした。
=======================ここから==========================
#include <stdio.h>
#include <string.h>
int main(void){
char *p,buf2[/url]="a,b,c,d";
int k;
p = strchr( buf2, ',' );
if ( p != NULL ){
for(k=0;k<(int)p-(int)buf2;k++){
strcpy(buf2+k," ");
}
}
printf("%s",buf2);
return 0;
}
==================ここまで===============================
何がまずかったのでしょうか?
コンマ以前の部分を削除したい
Re:コンマ以前の部分を削除したい
>最初に出てくるコンマより前の部分を消したいです。
>「a,b,c,d」が「b,c,d」になって欲しいのです。
コンマより前の部分を消すとはどのような処理を想定されているのでしょうか?
'b'をbuf2[0]にコピー、その次の','をbuf2[1]にコピー・・といった具合に
ずらしていくのかと思いましたが、" b,c,d"のように最初に見つけた','までを
半角スペースで上書きしたいのでしょうか?
>for(k=0;k<(int)p-(int)buf2;k++){
> strcpy(buf2+k," ");
>}
strcpy()ではナル文字まで書き込まれてしまいます。
また同じ配列の要素を指すポインタ同士の減算は合法です。
逆に (int)p-(int)buf2 のようにキャストしてしまうとまずいはずです。
>「a,b,c,d」が「b,c,d」になって欲しいのです。
コンマより前の部分を消すとはどのような処理を想定されているのでしょうか?
'b'をbuf2[0]にコピー、その次の','をbuf2[1]にコピー・・といった具合に
ずらしていくのかと思いましたが、" b,c,d"のように最初に見つけた','までを
半角スペースで上書きしたいのでしょうか?
>for(k=0;k<(int)p-(int)buf2;k++){
> strcpy(buf2+k," ");
>}
strcpy()ではナル文字まで書き込まれてしまいます。
また同じ配列の要素を指すポインタ同士の減算は合法です。
逆に (int)p-(int)buf2 のようにキャストしてしまうとまずいはずです。
Re:コンマ以前の部分を削除したい
こういうことでしょうか。
#include <stdio.h> #include <string.h> int main(void) { char s[/url] = "a,b,c,d", *p; puts(s); if(p = strchr(s, ',')){ ++ p; memmove(s, p, strlen(p) + 1); } puts(s); return 0; }
