ForNext
Only Do What Only You Can Do
086. 指定した文字数だけ、文字列をコピー
VBScript
JScript
Perl
PHP
Python
Ruby
PowerShell
Scala
F#
C
更新日 : 2010.10.08
#include <stdio.h> #include <string.h> char* str_ncpy(char* d, const char* s, size_t n) { char* t = d; int j = 1; unsigned i; for (i = 0; i < n; i++) { if ((*s) && j) *d++ = *s++; else { j = 0; *d++ = '\0'; /* \0 で 埋める */ } } return t; } int main(int argc, char* argv[]) { int i; char* st1 = "1234567890"; char* st2 = "ABCDE"; printf("st1 = %s\n", st1); printf("st2 = %s\n", st2); puts(""); str_ncpy(st1, st2, 4); printf("st1 = %s\n", st1); printf("st2 = %s\n", st2); puts(""); str_ncpy(st1, st2, 6); printf("st1 = "); for (i = 0; i < 10; i++) if (st1[i] == '\0') putchar(' '); else putchar(st1[i]); putchar('\n'); printf("st2 = %s\n", st2); puts(""); st1 = "1234567890"; strncpy(st1, st2, 4); printf("st1 = %s\n", st1); printf("st2 = %s\n", st2); puts(""); strncpy(st1, st2, 6); printf("st1 = "); for (i = 0; i < 10; i++) if (st1[i] == '\0') putchar(' '); else putchar(st1[i]); putchar('\n'); printf("st2 = %s\n", st2); puts(""); return 0; }
R:\>lesson086\project1.exe st1 = 1234567890 st2 = ABCDE st1 = ABCD567890 st2 = ABCDE st1 = ABCDE 7890 st2 = ABCDE st1 = ABCD567890 st2 = ABCDE st1 = ABCDE 7890 st2 = ABCDE
C++
C++Builder
VC++
C#
Java
Objective-C
D
VB
VB.NET
Delphi
更新日 : 2010.09.24
program Project1; {$APPTYPE CONSOLE} uses SysUtils; function str_ncpy(d:PChar; s:PChar; n:Integer):PChar; var i, j: Integer; begin result := d; j:= 1; for i := 0 to n - 1 do begin if s^ <> #0 then begin d^ := s^; Inc(s); Inc(d); end else begin d^ := #0; j := 0; break; end; end; if j = 1 then d^ := #0; end; procedure main(); const st1: String = '1234567890'; st2: String = 'ABCDE'; pt1: array[0..255] of Char = '1234567890'; pt2: array[0..255] of Char = 'ABCDE'; var i: Integer; begin Writeln(Format('st1 = %s', [st1])); Writeln(Format('st2 = %s', [st2])); Writeln(''); st1 := Copy(st2, 1, 4); Writeln(Format('st1 = %s', [st1])); Writeln(Format('st2 = %s', [st2])); Writeln(''); st1 := '1234567890'; st1 := Copy(st2, 1, 6); Writeln(Format('st1 = %s', [st1])); Writeln(Format('st2 = %s', [st2])); Writeln(''); Writeln(Format('pt1 = %s', [pt1])); Writeln(Format('pt2 = %s', [pt2])); Writeln(''); str_ncpy(pt1, pt2, 4); write('pt1 = '); for i := 0 to 9 do if pt1[i] = #0 then write(' ') else write(pt1[i]); Writeln(''); Writeln(Format('pt2 = %s', [pt2])); Writeln(''); pt1 := '1234567890'; str_ncpy(pt1, pt2, 6); write('pt1 = '); for i := 0 to 9 do if pt1[i] = #0 then write(' ') else write(pt1[i]); Writeln(''); Writeln(Format('pt2 = %s', [pt2])); Writeln(''); pt1 := '1234567890'; StrLCopy(pt1, pt2, 4); write('pt1 = '); for i := 0 to 9 do if pt1[i] = #0 then write(' ') else write(pt1[i]); Writeln(''); Writeln(Format('pt2 = %s', [pt2])); Writeln(''); pt1 := '1234567890'; StrLCopy(pt1, pt2, 6); write('pt1 = '); for i := 0 to 9 do if pt1[i] = #0 then write(' ') else write(pt1[i]); Writeln(''); Writeln(Format('pt2 = %s', [pt2])); Writeln(''); pt1 := '1234567890'; StrMove(pt1, pt2, 4); write('pt1 = '); for i := 0 to 9 do if pt1[i] = #0 then write(' ') else write(pt1[i]); Writeln(''); Writeln(Format('pt2 = %s', [pt2])); Writeln(''); pt1 := '1234567890'; StrMove(pt1, pt2, 6); write('pt1 = '); for i := 0 to 9 do if pt1[i] = #0 then write(' ') else write(pt1[i]); Writeln(''); Writeln(Format('pt2 = %s', [pt2])); Writeln(''); end; begin main; end.
S:\>lesson086\project1.exe st1 = 1234567890 st2 = ABCDE st1 = ABCD st2 = ABCDE st1 = ABCDE st2 = ABCDE pt1 = 1234567890 pt2 = ABCDE pt1 = ABCD 67890 pt2 = ABCDE pt1 = ABCDE 7890 pt2 = ABCDE pt1 = ABCD 67890 pt2 = ABCDE pt1 = ABCDE 7890 pt2 = ABCDE pt1 = ABCD567890 pt2 = ABCDE pt1 = ABCDE 7890 pt2 = ABCDE