【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22380

文字列操作 strncpy?
投稿者---popo(2005/08/03 02:32:55)


徹夜の宿題に行き詰ってしまいました。

配列の文字列操作について質問です。

配列に格納されている14桁の年月日時分秒を
年月日と時分秒に分けたいです。

<string.h>をincludeしてstrncpyを使ったのですが、
先頭の8桁分(年月日)は分けれたのですが、と下6桁の時分秒が取れません!

char *strncpy(char *s1, const char *s2, size_t n);
s1が格納先の配列で、s2が格納元の文字列、
nがその格納したい文字数ですよね。

下6桁がどうしてもだめで。。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列操作 strncpy? 22382 Blue 2005/08/03 02:53:54


No.22382

Re:文字列操作 strncpy?
投稿者---Blue(2005/08/03 02:53:54)


strncpyはすべて先頭(1文字目)からの抜き出しコピーになります。

20050803023520
----           年 先頭から4文字
    --         月 5文字目から2文字
      --       日 7文字目から2文字
        --     時 9文字目から2文字
          --   分 11文字目から2文字
            -- 秒 13文字目から2文字

--------       年月日 先頭から8文字
        ------ 時分秒 9文字目から6文字
            
ということなので、コピー開始位置(strncpyの第2引数)を変えてあげます。

char str[] = "20050803023520";
char date[ 9 ], time[ 7 ];

strncpy( date, str, 8 );
date[ 8 ] = '\0';

strncpy( time, &str[ 8 ], 6 );
time[ 6 ] = '\0';
/* strcpyでも可 */
/* strcpy( time, &str[ 8 ] ); */

strncpy以外にもsscanfを使う方法もあります。



この投稿にコメントする

削除パスワード

No.22383

Re:文字列操作 strncpy?
投稿者---Blue(2005/08/03 03:00:05)


ポインタ変数に入れるほうがわかりやすいかも。

char str[] = "20050803023520";
char date[ 9 ], time[ 7 ];
char* p = str;

strncpy( date, p, 8 );
date[ 8 ] = '\0';

/* 8文字分進める */
p += 8;

strncpy( time, p, 6 );
time[ 6 ] = '\0';



この投稿にコメントする

削除パスワード

No.22407

Re:文字列操作 strncpy?
投稿者---popo(2005/08/04 00:30:34)


Blueさん
ありがとうございます!
昨晩わたしも似たような形でコーディングすることが出来ました。

ポインタ操作も可能なんですね。勉強になります。
sscanfは初めて知りました。
どちらの関数がメリットあるとかあるのでしょうか?

奥が深いですね。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧