void main() {
char str[] = "구아악";
char num[20] = " ";
memset(num, ' ', sizeof(num));
//memset(num + sizeof(num), NULL, 1);
//memcpy(num, str, strlen(str));
printf("%d %d ",sizeof(num), strlen(num));
}
메모리셋해놓은거때문에 그런가?
완전초보라 테스트조금씩하면서 본체로 옮기는식으로 간단한프로그램 만들어보고있는데 기초적인데서문제가많다
네.. 버퍼 오버플로우네요. memset 잘못하셨네요. strlen 은 시작점부터 '\0' 이 나올때까지의 크기를 리턴합니다. 때문에 num 크기 이상의 메모리까지 전부 읽어들인겁니다.
NULL 캐릭터
그럼저기서 // 없엔코드에서오류가나는이유는멀까??
역슬래쉬0 으로 넣어야 strlen 0 나옴
내생각에 num을전부 공백스페이스바로 채우고, 20번째에 NULL 값주고, str에있는걸 복사하고싶엇는데
NULL이랑 널문자랑 다른
0 이 NULL 아님?
종료문자가안되는건가 0으론?
memset 은 메모리 초기화를 할때만 사용하시는게 좋습니다.
Null문자는 역슬래쉬+0
char* tmp = stdup(" ");
흠. 코드가 잘 입력이 안되네요. 암튼, string 초기 기본값은 직접 입력하시는게 좋습니다.
보통은 이렇게 하죠.
char* tmp = calloc(sizeof(char), 19 + 1);
snprintf(tmp, 19, "some_string");
죄송.. 이게 맞습니다. snprintf(tmp, 20, "some_string...");
작업 종료 후, 메모리 해제. free(tmp);
char* tmp = calloc(sizeof(char), 19 + 1); 이거하니까 'void* 형식의 값을사용하여 char*형식의 엔터티를 초기화할수없습니다' 라는데?
윈도우군요.. 이렇게 해보세요. char* tmp = (char*)calloc(sizeof(char), 19 + 1);
오 캐스트하면 그냥 되는구나
ㄳㄳ