2013-04-20 3 views
-2

첫 번째 문자열을 포함하지 않고 두 개의 문자열을 만들 수있는 방법이 있습니까?하나에서 두 개의 문자열 만들기

나는 현재 분명히 나는 ​​그것이 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); 

있습니다.

답변

2

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 */ 
1

문자열을 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

끝에 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; 
관련 문제