[질문]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.