첫 번째 문자열을 포함하지 않고 두 개의 문자열을 만들 수있는 방법이 있습니까?하나에서 두 개의 문자열 만들기
나는 현재 분명히 나는 그것이 G 창을 인쇄하고 싶습니다
G GEG
을 인쇄 할이char * s = "Generic String";
char foo[1];
memcpy(foo, s, 1);
char bar[2];
memcpy(bar, s, 2);
printf("%s %s\n", foo, bar);
있습니다.
첫 번째 문자열을 포함하지 않고 두 개의 문자열을 만들 수있는 방법이 있습니까?하나에서 두 개의 문자열 만들기
나는 현재 분명히 나는 그것이 G 창을 인쇄하고 싶습니다
G GEG
을 인쇄 할이char * s = "Generic String";
char foo[1];
memcpy(foo, s, 1);
char bar[2];
memcpy(bar, s, 2);
printf("%s %s\n", foo, bar);
있습니다.
C의 모든 문자열에는 끝 마커 즉 null 문자가 필요합니다.
그래서 코드
char foo[1];
는
char foo[2];
다른 하나
foo[0] = s[0];
foo[1] = 0;
동감가 와야합니다.
즉
당신은 필요char bar[3];
memcpy(bar, s, 2); /* As you prefer */
bar[2] = 0; /* To terminate the string */
문자열을 NUL - 종료합니다. 현재 프로그램은 정의되지 않은 동작을 호출합니다. 또한 문자열 리터럴에서 초기화 할 때는 const char *
또는 char []
을 사용하십시오. 그렇지 않으면 const가 정확하지 않습니다.
const char *s = "Generic String";
char foo[2];
memcpy(foo, s, 1);
foo[1] = 0;
char bar[3];
memcpy(bar, s, 2);
bar[2] = 0;
printf("%s %s\n", foo, bar);
끝에 0이없는 문자열을 사용하고 있습니다.
옵션 1 : 인쇄 폭을 제한 :
printf("%*s %*s\n", 1, foo, 2, bar);
옵션 2 : 문자열 터미네이터위한 공간을 할당 (0).
char foo[2];
char bar[3];
memcpy(foo, s, 1);
foo[1] = 0;
memcpy(bar, s, 2);
bar[2] = 0;