왜 malloc
6 바이트 char
유형을 할당 하지만 2 바이트가 필요합니다. 내가 1 바이트를 할당하면 그는 5 바이트를 할당합니다. 이유를 모르겠습니다.
#include "stdlib.h"
int main()
{
char *lin = malloc(2);
lin[0] = 'a';
lin[1] = 'b';
char *line = (char *)malloc(sizeof(char) * 2);
line[0] = 'z';
line[1] = 'b';
printf("lin = %s\nline = %s\n", lin, line);
get_next_line(fd, line);
return (0);
}
콘솔이
lin = ab¤¤¤¤
line = zb¤¤¤¤
C에서 ASCII 문자열은 0이 아닌 바이트의 시퀀스와 값이 0 인 바이트로 표시됩니다 . Null로 끝나는 바이트 문자열을 참조하세요 . 문자열 "ab"
은 값을 보유하는 배열로 표시됩니다 0x61, 0x62, 0x00
.
예:
string: 'a' | 'b' |
memory: 0x61 | 0x62 | 0x00
빠른 수정:
char *lin = malloc(3); // allocate one more char
lin[0] = 'a';
lin[1] = 'b';
lin[2] = '\0'; // terminate the string
귀하의 경우, malloc
6 바이트를 할당 printf
하지 않고 문자열이 0으로 끝나지 않기 때문에 의사 임의 "가비지"를 인쇄합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다