2013-04-24 2 views
0

이 코드가 있습니다다른 답변

: 나는)

int main(void){ 
1 char test[]="carmakarchile"; 
2 //squeeze(test,'a'); 
3 //printf("%s\n",test); 
4 char f[]="Magnificent"; 
5 char n[]="King Rex"; 
6 strca(f,n); 
7 squeeze(test,'a'); 
8 printf("%s\n",test); 
9 printf("%s",f); 
    } 

(주에서 함수를 호출 할 때 지금

//function to delete the occurence of c in s 
void squeeze(char s[], int c) { 
    int i,j; 
    for(i=j=0;s[i]!='\0';i++) 
    if(s[i]!=c) 
     s[j++]=s[i]; 
    s[j]='\0'; 
} 

//function to concatenate string 
void strca(char c[],char b[]){ 
    int i,j; 
    i=j=0; 
    while(c[i]!='\0') 
    i++; 
    c[i++]=' '; 
    while((c[i++]=b[j++])!='\0') 
    ; 
} 

는 연산을 제공합니다

King Rex 
    Magnificent King Rex 

주석을 제거하는 중 2, 3 라인과 7, 8에 코멘트를 퍼팅 라인이 날 수 있습니다 :

 crmkrchile 
     Magnificent King Rex 
난 그냥 어떻게 차이가 발생할 않는 이유를 알고 싶어

? 사전

답변

2
char f[]="Magnificent"; 

감사드립니다 배열 0 종결을 포함한 문자열 "Magnificent"을 보유 할만큼 충분히 큰 f한다.

char n[]="King Rex"; 
strca(f,n); 

행복하게 정의되지 않은 동작을 호출, 배열 경계의 외측에 기록하고 분명히 다른 배열 test을 덮어 쓰지이 경우이다. 당신이 연결의 결과를 저장하기에 충분히 큰 배열을 선언하면

,

char f[32] = "Magnificent"; 

예를 들어, 모든이 제대로 작동합니다.

+0

아 .. 알았어. 알았어. :) – ejjyrex

0

연결 함수는 c [] 배열을 지나서 씁니다. 문자열을 연결하려면 양쪽 문자열이 맞도록 충분한 메모리를 할당해야합니다 (종료는 \0 포함).

예를 들어, f []와 n []가 메모리에서 서로 옆에있는 것처럼 "운이 좋다"고 할 수 있습니다. 따라서 종료 null을 공백으로 바꿀 때 연결된 문자열이 될 수 있습니다.