문자열의 첫 번째 문자를 제거하라는 연습 문제에 대해 연구 중입니다. 전의. char * string = "Rudolph", removeFirst (string)을 호출 한 후, string은 이제 "udolph"와 동일합니다.메인에서의 문자 포인터 연산 대 다른 함수에서
내가 주인공으로 다 알아 차려도 "udolph"라는 결과가 나옵니다. 여기 내 코드는 다음과 같습니다.
int main() {
char *string = "Rudolph";
printf("%s\n", string);
//removeFirst(string);
string++;
printf("%s\n", string);
return 0;
}
그러나 다른 함수를 호출하면 내 출력은 루돌프입니다. 여기에 다시는 내 코드입니다 : 내가 포인터 함께 일하고 있어요 점을 감안
void removeFirst(char *string) {
if (string == "" | string == NULL)
return;
string++;
}
int main() {
char *string = "Rudolph";
printf("%s\n", string);
removeFirst(string);
//string++;
printf("%s\n", string);
return 0;
}
, 나는 removeFirst와에서 변경 한도 메인에 그것을 만들해야한다고 생각했다. 왜 그렇게 작동하지 않습니까?
'removeFirst()'함수의 근본적인 오해 : 먼저 변수'string'는 그 함수에 국한되어 있으므로 함수에서 변경하면'main()'에 영향을 미치지 않습니다. 둘째, 문자열을'=='와 비교할 수 없다. 단지 포인터를 비교하는 것 뿐이다. 셋째, 이러한 것들을 고쳤더라도 main의'string'은 리터럴에 할당되고 문자열 리터럴은 읽기 전용이므로 segfault가됩니다. –