|
char s[5][10];
에서 s[0]의 값은 '쓰기가 가능한 포인터변수'가 아닙니다.
s[5][10]에 의해 50개의 char 가 메모리에 잡히고
그것을 10개씩 5개로 나누어 컴파일러가 관리합니다.
s[1]을 하게 되면 컴파일러는 *(s+1*10)를 계산하는것처럼 말이죠...
실제로는 *(s+1)에서 1에 알아서 배열 크기인 10을 곱해줍니다...
이렇게 얻어진 s[1]은 s[5][10]으로 길게 늘어선 배열의 실제 주소를 나타내 줍니다.
즉 s[1]과 &s[1]은 같은 값입니다.
s[1]=s[0];
이것은 실행되지 않습니다.
위 코드는 &s[1]=s[0]; 와 같은것이며 &s[1]은 메모리의 실제 주소이므로 예를들어 &s[1]이 0x12345678이라면
0x12345678=s[0];
과 같습니다.
숫자에 값을 대입하는것과 같은것이죠.
그냥 배열로 문자열을 정렬 하시려면 s[0], s[1]..을 비교하셔서 각각 위치를 교환하세요
char temp[10];
strcpy..이러한식의 함수를 사용하시거나 for를 하나 더 돌려서..
기존 소스에서 간단하게 변경하시려면
char *ss[5]; // 배열을 5개 잡고 그 안에는 char*형 데이타가 들어가게끔...
ss[0]=s[0];
..
이렇게 하신후 ss를 이용해서 정렬을 하세요
당연히 s는 변하지 않습니다. ss에 들어있는 문자열 s들의 순서가 변하지요
C하는토끼 님이 쓰신 글 :
: 안녕하세요~~~
: 정말 개념이 안서서 그러는데 로직의 상태가 뭐가 잘못된건지 봐주세요.
: 문자열을 최대 5개까지 받아서 정렬하는 프로그램입니다.
: 물론 문자열은 크기는 10자 이내이구요.
: //◀ 화살표 부분에 Lvalue Required 라는 에러가 뜨면서 안되는데요
: 뭐가 문제 일까욤?
: 누가 명쾌한 해답을... ㅠㅠ;
:
:
:
:
: #include <stdio.h>
: #include <conio.h>
:
: main()
: {
: static char s[5][10];
: int i, j,num1;
: char *temp;
: printf("몇문자를 입력하시겠어요=>");scanf("%d",&num1);
: for(i=0;i<num1;i++) {
: printf("문자열을 입력하세요=>");scanf("%s",s[i]);}
:
: for(i=0;i<num1;i++)
: printf("%s \n", s[i]);
: printf("--------------\n");
:
: for(i=0;i<num1;i++)
: for(j=0;j<num1;j++)
: if(*s[i] < *s[j]) {
: temp=s[i] ;
: s[i] = s[j] ; //◀
: s[j] = temp; //◀
: }
:
:
: for(i=0;i<5;i++) printf("%s \n", s[i]);
: getch();
: }
:
:
|