strlen은 null로 끝나는 문자열이 포함되어 있어도 할당 된 char 배열의 크기를 결정하지 않습니다. 전반적인 코드 구조가 마음에 들지 않지만 제안 된 수정 내용을 확인하십시오. 추가 할당 문자로 끝납니다.
char *str = malloc(sizeof(char));
int i = 0;
while(something == true){
str[i] = fgetc(fp);
str = realloc(str, (i+2)*sizeof(char));
i++;
}
// str[i*sizeof(char)]='\0'; <-- Add this if you want a null terminated string
free(str);
내가 여분의 문자 할당 피할 것이다 다음 코드를 제안 할 것입니다 : 문서 당으로
char *str = NULL;
int i = 0;
while(something == true){
str = realloc(str, (i+1)*sizeof(char));
str[i] = fgetc(fp);
i++;
}
free(str);
, "경우에 널 포인터 ptr에, 함수는 할당, malloc에 같은 동작 size 바이트의 새로운 블록과 그 시작 부분에 포인터를 반환합니다. "
char *str = malloc(sizeof(char));
int i = 0;
const int chunk_size = 100;
while(something == true){
str[i] = fgetc(fp);
if (i % chunk_size == 0)
str = realloc(str, (i+1+chunk_size)*sizeof(char));
i++;
}
// str[i*sizeof(char)]='\0'; <-- Add this if you want a null terminated string
free(str);
'str'는'0되지 않습니다 :
이 시간 할당에
덩어리는 ... 텍스트를 읽을 수 없습니다와 나 strlen, strcat와 같은 기능을 사용할 계획이없는 경우에 '-terminated, 그러므로'strlen (str)'은 정의되지 않은 행동이다. 'realloc (str, i + 2);를 시도하십시오. – AlexD
매우 효율적이지 않습니다. 상한 또는 1k의 청크로 재 할당 할 것인가? 또한 strlen을 반복적으로 사용하는 것을 피하십시오. –
'i + 2'로 작업했습니다. 고맙습니다! – Christopher