Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C에서 char s[]와 char *s의 차이점

<시간/>

우리는 때때로 문자열이 char s[]를 사용하여 만들어지거나 때로는 char *s를 사용하는 것을 보았습니다. 여기에서 차이점이 있는지 또는 동일한지 확인할 수 있습니다.

몇 가지 차이점이 있습니다. s[]는 배열이지만 *s는 포인터입니다. 예를 들어, 두 선언이 각각 char s[20] 및 char *s와 같으면 sizeof()를 사용하여 20과 4를 얻습니다. 첫 번째 선언은 20바이트가 있음을 보여주기 때문에 20이 됩니다. 데이터. 그러나 두 번째 것은 하나의 포인터 변수의 크기이므로 4만 표시됩니다. 배열의 경우 전체 문자열이 스택 섹션에 저장되지만 포인터의 경우 포인터 변수는 스택 섹션에 저장되고 내용은 코드 섹션에 저장됩니다. 그리고 가장 중요한 차이점은 포인터 유형 문자열을 편집할 수 없다는 것입니다. 따라서 이것은 읽기 전용입니다. 그러나 문자열의 배열 표현을 편집할 수 있습니다.

#include<stdio.h>
main() {
   char s[] = "Hello World";
   s[6] = 'x'; //try to edit letter at position 6
   printf("%s", s);
}

출력

Hello xorld
Here edit is successful. Now let us check for the pointer type string.

#include<stdio.h>
main() {
   char *s = "Hello World";
   s[6] = 'x'; //try to edit letter at position 6
   printf("%s", s);
}

출력

Segmentation Fault