|
웁스~~
아래와 같은 방식은 [C++Builder]게시판에 어떤님꼐서 올리신것처럼 VC에서는 되고
정상적인 컴파일러라면 안됩니다. 아주 아주 위험한 코드입니다.
char *s[5];
는 char*형 변수 5개를 잡는다는 것이죠. 이 경우 메모리에는 포인터 변수 5개만 만들어 집니다.
그리고 각 변수 안에는 0이 들어있거나 쓰레기값이 들어있을텐데..
아래 처럼하면 쓰레기값 위치에 문자열을 넣는것과 같습니다. 도스라면야 죽을때까지 돌겠죠
메모리에는 님께서 입력하시는 문자열이 들어갈 어떤 위치도 잡지 않으신거죠.
char *s[5]을 선언후 malloc으로 메모리를 할당 하시거나
char s[5][10]으로 선언후 for,for문으로 i,j를 이용하여 s를 비교하신후 다시 for문을 사용해서 문자열을 교환하세요.
char temp[10];
for(i=0;i<num1;i++)
for(j=0;j<num1;j++)
if(*s[i] < *s[j]) {
for(int k=0;k<10;k++)
{
temp[k]=s[i][k] ;
s[i][k] = s[j][k] ;
s[j][k] = temp[k];
}
}
C하는토끼 님이 쓰신 글 :
: : : #include <stdio.h>
: : : #include <conio.h>
: : :
: : : main()
: : : {
: : : char *s[5]; //◀ 변경하였슴.
: : : int i, j,num1;
: : : char *temp;
: : : printf("몇문자를 입력하시겠어요=>");scanf("%d",&num1);
: : : for(i=0;i<num1;i++) {
: : : printf("문자열을 입력하세요=>");scanf("%s",s[i]);} //◀ 문법적 오류는 나지 않는데 Scanf가 한문자열을 받고 오류가 나네요. ㅠㅠ;
:
: : :
: : : 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();
: : : }
: : :
: : :
|