[질문]c언어 문자 읽어들이는 부분에서 쓰레기글자들이 추가됩니
글쓴이: boardholic / 작성시간: 일, 2005/04/10 - 12:02오후
#include <stdio.h> #include <string.h> #include <conio.h> #define TRUE 1 #define FALSE 0 typedef struct data{ char label[8]; char opCode[6]; char operand[18]; char comment[31]; char comnt[66]; }; void readSrce(); char buffer[66]; main() { data srcLine; int i; char c; readSrce(); if(buffer[0]=='.') strcpy(srcLine.comnt,buffer); else if(buffer[0] >= 'A' && buffer[0] <= 'Z') strncpy(srcLine.label,buffer,8); else return 0; printf("label=%s\n",srcLine.label); while(!kbhit()); } void readSrce() { FILE *fp; fp=fopen("srcFile.txt","r"); fgets(buffer,66,fp); }
아직 시작하는 부분인데 여기서 strncpy로 buffer의 8글자만
입력 받아서 저장할려고 하는데 저장하고 출력하면 쓸데없는 글자들도 같이 출력됩니다. 왜그런걸가요 -.-[/code]
Forums:
printf()의 %s는 NULL을 문자열 끝으로 인식합니다. 아마 이걸
printf()의 %s는 NULL을 문자열 끝으로 인식합니다. 아마 이걸 빼먹은거 같군요.
NULL = 0인건 아시겠죠.
Written By the Black Knight of Destruction
헉 너무 오랜만에 하다보니까 기본적인것도 까먹었었네요.ㅜ.ㅜ..감
헉 너무 오랜만에 하다보니까 기본적인것도 까먹었었네요.ㅜ.ㅜ..
감사합니다.^^*
나에게 있어 한계란 없다.
무한한 꿈을향해 나아간다.
스트링 처리시 알아야 할 몇가지.[End Condition]을 명
스트링 처리시 알아야 할 몇가지.
[End Condition]을 명확히 하라.
- NIL, NULL...등의 문자열의 끝을 표현할수 있는 방법이 있어야 합니다. 그리고, 본인이 쓰고자 하는 함수(ex. printf("%s"), strcpy())들의 방식도 알아야 합니다. 관례상 NULL을 문자열의 끝으로 표시합니다.
메모리를 항상 의심해라!
- 메모리는 쓰기 전에도, 쓰고 난후에도 관리해여야 합니다. 파일열고, 쓰고, 여러가지에 익숙해질 쯤 음지에서 그 모습을 감추고 있다. 슬그머니 그 모습을 드러내죠.
ex) 쓰기전에 Clean, 쓰고 난후에도 Clean!! 약간의 오버헤드가 있더라도 데이터의 무결성을 위하여...
정해진 루트로의 접근만 허용해라.
- char buffer[10]라면 buffer 또는 char* ptr = buffer와 같이 그 루트가 항상 동일하고, 명확하고, 되도록이면 처음부터 이루어져야 합니다. 부득이하게 중간을 포인터해서 읽어야 한다면. const로 접근 해야 합니다. 물론 포인터시 const로 접근하면 좋습니다. 그리고, 포인터의 처리도 확실히 해야 합니다.
이것말고 몇가지 더 있으나 생략...^^;
오. 모든게 귀차니즘에 반한다면...(#ifdef, #ifndef)와 같은 디버그모드와 릴리즈모드로 따로 동작할수 있게 만드는 것을 추천합니다.
이것도 귀차니즘에 반한다면...제일 좋은 방법이지만...아는 길로만 가는 방법입니다. 본인이 잘 input, output을 잘알고 있는 함수만 쓰고, 메모리, 스트링...자신이 잘 다룰수 있는 방법으로만 쓰는겁니다. 이것 또한 한가지의 최적의 방법입니다. 편하더라도 모르는 함수를 쓰다보면 자신도 모르는 side effect에 직면할수 있습니다. 돌아가도 아는 길로만 간다. 이것도 정석의 하나가 아닐지...
Hello World.
댓글 달기