2013-04-09 4 views
-5

프로그램을 실행하는 중 오류가 어디에 있습니까? 두 함수에서 FOR 루프의 행에 문제가 있다는 것을 알고 있습니다.프로그램 실행 중 오류 - C

디버거를 사용하여 실행 한 이유가 무엇인지 알 수 없습니다.

충돌이 있습니다 : program2.exe에서 0x00E214E5 처리되지 않은 예외 : 0xC0000005 : 0x00E25865 위치를 작성하는 액세스 위반.

그리고 나서 프로그램이 중지됩니다.

내 코드 :

#include <stdio.h> 

char *what1 (char s[], char t[], int n); 
int what2 (char str[], char c); 

int main() 
{ 

    printf("%s\n", what1("hello", "world", 2)); 
    printf("%d\n", what2 ("fkbf", 'o')); 

    return 0; 
} 


char *what1 (char s[], char t[], int n) 
{ 
    char *p=s; 
    while (*s++); 
    for (--s; n-- && (*s=*t); s++, t++); 
    *s='\0'; 
    return p; 
} 

int what2 (char str[], char c) 
{ 
    char *ptr; 
    for (ptr=str; *ptr;) 
     if ((*str=*ptr++)!=c) 
      str++; 
    *str ='\0'; 
    return ptr-str; 
} 
+0

오류 메시지가 나타 납니까? 무슨 일이야? 무슨 일이 일어날 것으로 예상됩니까? – EClaesson

+0

어떤 종류의 오류가 있습니까? 그것은 충돌인가? 또는 예기치 않은 수익? 쓰레기 수거? ... – MOHAMED

+0

선택할 문자열 리터럴의 변경에 대해서는 어떤 질문을해야할지 모르겠지만 분명히 중복 질문입니다. –

답변

3

모두 what1()what2() 리터럴로 전달 된 문자열을 수정하고, 그와 같은 문자열이 읽기 전용 메모리에 저장 될 수 있기 때문에 정의되지 않은 동작입니다.

+0

나는 문자열이 읽기 전용 메모리가 아니라고 생각한다. 왜 문자열이 읽기 전용 메모리이고, 어떻게 메모리를 쓰도록 변경할 수 있습니까? – Michael