【掲示板ご利用上の注意】
※題名は具体的に! ※学校の課題の丸投げ禁止! ※ソースの添付は「HTML変換ツール」で字下げ! ※返信の引用は最小限に! ※環境(OSとコンパイラ)や症状は具体的に詳しく! ※返信付き投稿の削除は禁止! ※マルチポスト(多重投稿)は慎んで! 詳しくはこちら
本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。 守ってくださいね。お願いします。(by管理人)
C言語ソース⇒HTML形式ツール掲示板2はこちら
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を使う方法もあります。
ポインタ変数に入れるほうがわかりやすいかも。 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';