2013-07-30 5 views
0

나는이 질문을 대학에서 해결할 수 없다. 나는 우리 대학 포럼에 물어 그들은이 단서는 말했다 : "당신이 긴 문자열이 strcat와 보낼 경우 차이, 또는 문자열 B를 보낼 것"strcat 함수를 사용할 때의 오류 찾기

다음 프로그램에 어떤 문제가 있는지 설명 :

#include <string.h> 
#include <stdio.h> 
int main() 
{ 
    char A[10]; 
    char B[20]; 
    strcpy(A, "A student"); 
    strcpy(B, "fail the exam"); 
    printf("%s\n", strcat(A, B)); 
    return 0; 
} 
+0

[학생이 시험에 실패 함]을 출력합니다. 질문이 있으면 더 명확하게 나타낼 수 있습니까? –

+1

프로그램을 실행 했습니까? 어떤 오류가 있었습니까? –

+0

누락 된 공간을 기록하십시오. 'A'가 충분히 크더라도'A studentfail the exam'을 인쇄 할 것입니다. – ugoren

답변

2

strcat의 첫 번째 매개 변수는 연결된 결과 문자열을 포함 할 수있을만큼 커야합니다. 따라서 다음과 같이 변경하십시오 :

char A[30]; 

으로 변경하십시오. 그렇지 않으면 세그먼테이션 결함이 발생할 수 있습니다.

2

"학생의 시험 응시 실패"는 이 10보다 큰 경우를 참조하십시오.

그래서 최소한의 새로운, 연결된 문자열을 보유 할만큼 충분히 커야합니다 때문에 strcat(s,t)을 병합 t 의 말에 char A[24] 대신

1

char A[10]의를 사용합니다. s에서 첫 번째 문자에 대한 포인터를 반환합니다.

+1

s/s에 대한 포인터를 반환합니다. s를 반환합니다. – Jens

+0

죄송합니다. –

0

배열 A는 배열 B의 내용을 담을만큼 충분히 커야합니다. 다른 현명한 strcat 동작은 예측할 수 없습니다. 세그먼트 화 오류가 발생할 수 있습니다. 응용 프로그램에 충돌이 발생할 수 있습니다. 아래 링크를 참조하십시오. [링크] http://linux.die.net/man/3/strcat