2010-07-25 4 views
2
char *strip_postfix(char *str1, char *str2) 
{ 
    int i; 

    for(i=0; str2[i] != '\0'; i++) 
    { 
     if(str1[i] != str2[i]) 
     { 
     str1[i] = '\0'; 
     break; 
     } 
    } 
    return str3; 
} 

이 코드는 실행 중 줄 str1 [i] = '\ 0'에서 세그먼트 오류 오류를 제공합니다 ... .. 나는 새로운 변수를 만들고 거기에 내용을 복사하고 새로운 변수를 반환하는 동안 모든 것이 잘 작동하는 것처럼 메모리 할당 문제가 있다고 생각합니다.이 문제가 무엇인지 알려주세요.두 문자열의 공통 접두사 유지 ..... C 프로그래밍 ... 분할 오류 오류

+1

을 좋아한다 'str3'는 어디에도 선언되어 있지 않습니다. –

답변

4

str1이 str2보다 작은 경우 어떻게됩니까?

또한이 :

날이 코드는 현재의 형태로 컴파일되지 않습니다 생각하게
return str3; 

이 ...

+0

'str1'이'str2'보다 작 으면'str1'의 끝에서 루프의'if' 조건이 참일 것이고 함수는 나쁜 영향없이 종료 할 것입니다. – sth

+0

1이 꺼져 있기 때문에 segfaults가 발생합니다. – Gian

+0

'\ 0'을 끝내는이 문자열을 이미 포함하고있는'str1'의 그 장소에' '\ 0'을 할당하지 않습니까? – sth

0

귀하의 코드가

int str1len = strlen(str1);  
for(i=0; str2[i] != '\0'; i++) 
    { 
     if(str1[i] != str2[i] || i >= str1len) 
     { 
     str1[i] = '\0'; 
     break; 
     } 
    } 
return str1; 

감사

+0

'i'선언이 누락되었습니다. –

+0

'str2'가'str1'의 접두사 인 경우 이것은 공통 접두사를 반환하지 않습니다. – sth