나는 어딘가에 질문을 발견했다.gcc에서 세그멘테이션 오류가 발생하는 간단한 C 코드
main()
{
char *p="hai friends",*p1;
p1=p;
while(*p!='\0') ++*p++;
printf("%s %s",p,p1);
}
Answer:
ibj!gsjfoet
Explanation:
++*p++ will be parse in the given order
촬영 될 현재 P가 가리키는 위치의 값이
* 피
++ * P 검색된 값
를 증가 될 것이다; 이 발생하면 위치가 증가하여 p ++가 실행됩니다.따라서 p가 가리키는 while 루프 초기 값은 'h'이고 ++ * p를 실행하여 'i'로 변경되고 포인터가 다음 위치로 이동합니다. 점 'a'는 'b'와 비슷하게 변경됩니다. 마찬가지로 공백은 '!'로 변환됩니다. 따라서 p에서 값은 "ibj! gsjfoet"이되고 p는 '\ 0'에 도달하고 p1은 p를 가리키므로 p1은 아무 것도 인쇄하지 않습니다.
p1에 대한 설명이 잘못되었습니다. p1이 "hai friends"를 출력하고 p의 출력이 주어진 것처럼 좋다고 생각합니다.
하지만 GCC 컴파일러에서 동일한 코드를 실행하려고 할 때, 그 여기 segmentatiion 오류를주고 내가 실행하려고 정확한 코드 ..
#include<stdio.h>
int main()
{
char *p="hai friends",*p1;
p1=p;
while(*p !='\0') ++*p++;
printf("%s %s",p,p1);
return 0;
}
가능 편집하는 경우입니다 제목, 상황을 더 명확하게 설명하는 적절한 제목을 찾을 수 없습니다.
는 편집 :
나는 Mysticial에 의해 제안 수정 된 코드를 실행하려고하지만 나는 출력해야한다고 생각 -
ibj!gsjfoet hai friends
나는 P1이해야 만 P0하지만이 증가하고 있기 때문에 그것의 최초의 장소 즉 string.Please의 시작 주소로 누군가가 내가 그것을 잘못 받고 설명 할 수 있다면 ???
* *는 (는) 중복되어야합니다. 그래도 게으르다. – Tom