-
[잡담] c언어 할 줄 아시는 분2012.11.24 AM 02:20
#include
#include
#include
int main(void)
{
FILE *fp = fopen("word.txt", "r");
char *words_p[100];
int words_n[100];
int words_number=0;
char* s;
int i;
while(fscanf(fp,"%[^ \t\n.,!?:]%*c", s)!=EOF)
{
for(i=0; i
if(strcmp(s,words_p[i])==0)
{
words_n[i]++;
break;
}
}
if(i==words_number)
{
words_p[words_number]=(char*)calloc(strlen(s)+1, sizeof(char));
strcpy(words_p[words_number],s);
words_number++;
}
}
fclose(fp);
return 0;
}
뭐가 잘못됐는지 자꾸 실행이 안되네요,,
댓글 : 11 개
- 루리순돌
- 2012/11/24 AM 02:30
char * words_p[100] 은 char words_p[100] 을 쓰려고 했던 거겠죠?
- 루리순돌
- 2012/11/24 AM 02:31
그런데 char* s 는 할당 해주지 않고 쓰고 있어서 런타임에러가 날거 같아요
- JiEun,
- 2012/11/24 AM 02:33
ㄴ무슨말인지 잘ㅜ
- 루리순돌
- 2012/11/24 AM 02:44
제 첫번째 답변은 일단 무시해버리시고!
두번째 글처럼 s 는 char* 캐릭터 포인터 형으로 생성되었는데,
크기 할당이 안된채로 사용되고 있어요~
그래서 fscanf 에서 접근하려다가 죽는거에요.
두번째 글처럼 s 는 char* 캐릭터 포인터 형으로 생성되었는데,
크기 할당이 안된채로 사용되고 있어요~
그래서 fscanf 에서 접근하려다가 죽는거에요.
- 매냑군
- 2012/11/24 AM 02:47
포인터는 선언과 동시에 할당을 하던지
아니면 NULL 을 가르키게 하던지
정 모르시겠으면 while 시작 부분에 브레이크 포인트 (F9) 걸고
한줄 한줄(F10) 각각의 변수에 어떤값이 들어있는지 체크해보세요
디버깅 능력이 중요합니다
아니면 NULL 을 가르키게 하던지
정 모르시겠으면 while 시작 부분에 브레이크 포인트 (F9) 걸고
한줄 한줄(F10) 각각의 변수에 어떤값이 들어있는지 체크해보세요
디버깅 능력이 중요합니다
- 루리웹-198137259
- 2012/11/24 AM 02:47
s를 계속 포인터형 편수로 쓰겠다면
s = (char*) malloc( 100 );
이런 식으로 메모리 공간을 할당하시던가,
아니면 char *s를 char s[100]으로로 선언하세요.
포인터 변수가 가리키는 주소에 기억 장소가 할당되어 있지 않을때
프로그램이 오류가 납니다. 100%
s = (char*) malloc( 100 );
이런 식으로 메모리 공간을 할당하시던가,
아니면 char *s를 char s[100]으로로 선언하세요.
포인터 변수가 가리키는 주소에 기억 장소가 할당되어 있지 않을때
프로그램이 오류가 납니다. 100%
- 편안한 집
- 2012/11/24 AM 02:54
%*c에 문제가 있는 줄 알았더니 그냥 파일 맞춰주는 용이었네요...
그냥 s에 메모리가 할당 안되어 있는 문제가 맞는 것 같습니다.
char s[100]; 같은 걸로 바꾸세요.
char *word_p[100]도 char word_p[100]가 되야 할 것 같고요...
그냥 s에 메모리가 할당 안되어 있는 문제가 맞는 것 같습니다.
char s[100]; 같은 걸로 바꾸세요.
char *word_p[100]도 char word_p[100]가 되야 할 것 같고요...
- 루리웹-198137259
- 2012/11/24 AM 03:01
이 소스의 모양새를 보아 하니... word.txt 내에 있는
각각의 단어의 개수를 세어보는 소스인것 같은데...
이 소스는 s에 메모리가 할당되어도 단 한번의 반복문도 일어나지 않으니
로직을 완전 다시 세우시기 바랍니다.
각각의 단어의 개수를 세어보는 소스인것 같은데...
이 소스는 s에 메모리가 할당되어도 단 한번의 반복문도 일어나지 않으니
로직을 완전 다시 세우시기 바랍니다.
- Mindflow
- 2012/11/24 AM 03:09
예제를 그대로 써도 컴파일러가 다르다면 에러가 나는 경우가 많습니다.
보통 컴파일러가 에러난 부분을 교정해서 컴파일해주는 경우가 있는 반면,
자비없이 에러로 내쳐버리는 경우도 있거든요.
배열포인터 뿐만 아니고, 레지스터에 할당되는 데이터 크기부분도
윈도우쪽 비쥬얼C 컴파일러는 자기 임의대로 만들어서 컴파일해주지만
gcc는 칼같이 에러로 내쳐버립니다.
그리고 gcc처럼 에러로 내쳐버리는 것이 메모리 누수라던지 심각한 에러를 막는 가장 좋은 방법이기도 합니다.
보통 컴파일러가 에러난 부분을 교정해서 컴파일해주는 경우가 있는 반면,
자비없이 에러로 내쳐버리는 경우도 있거든요.
배열포인터 뿐만 아니고, 레지스터에 할당되는 데이터 크기부분도
윈도우쪽 비쥬얼C 컴파일러는 자기 임의대로 만들어서 컴파일해주지만
gcc는 칼같이 에러로 내쳐버립니다.
그리고 gcc처럼 에러로 내쳐버리는 것이 메모리 누수라던지 심각한 에러를 막는 가장 좋은 방법이기도 합니다.
- 촐랑
- 2012/11/24 AM 04:13
words_number=0 인데 for(i=0; i<words_number; i++) 하니 루프가 끝나버리네요
- oilugi
- 2012/11/24 AM 06:15
for 문이 문제네요
i=0; 인데 0<0 ; i++ 이 되니.. 돌아갈리가 없죠
i=0; 인데 0<0 ; i++ 이 되니.. 돌아갈리가 없죠
user error : Error. B.