指定した文字数だけ、文字列をコピー

明解C言語 入門編 > 11. 文字列とポインタ >

指定した文字数だけ、文字列をコピー

C


#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;
}

実行結果

T:\>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