문자열을 함수에 전달할 때 함수를 사용할 때 sizeof (array)/sizeof (array [0]) 문자열의 길이를 결정합니다. 그래서 문자열의 끝에 문자를 추가하는 데이 기능을 궁금 올바른지 :문자열 끝 부분에 문자를 추가하는 함수
void append_ch_to_str(char *str, char ch)
{
int length = strlen(str);
str = (char *)realloc(str, (length + 1) * sizeof(char));
length = strlen(str);
*(str + length - 1) = '\0';
*(str + length - 2) = ch;
}
나는 그것이 맞지 않다고 생각한다. – BLUEPIXY
(1) 문자열의 길이는'realloc()'에서 변경되지 않으므로 두 번째'strlen()'은 불필요합니다. (2) 할당하는 길이가 너무 작습니다 (하나씩). (3) 새로운 업데이트 문으로 잘못된 위치에 글을 쓰고 있습니다. (4) 할당 된 메모리의 새로운 위치를 호출 코드로 전달하지 않습니다. 이 중 (1) 가장 심각한 것은 아닙니다. 나머지는 모두 코드의 올바른 작동에 중요합니다. 주의 :'strlen()'은 문자열의 바이트 수를 널 바이트까지 계산합니다. 이것은 문자열에 할당 된 공간의 양과 관계가 있거나 없을 수 있습니다. –
이 함수를 반복적으로 호출하면 잠재적 인 2 차 동작에 대해 생각할 수도 있습니다. 여러 가지 목적을 위해 더 나은 인터페이스는 문자열에 문자열을 추가하는 것이고 한 문자열은 특수한 경우입니다. 때로는 현재 디자인이 아플 수도 있습니다. 한번에 하나의 문자를 더 잘 추가하는 것은'char *'나'char **'보다 더 복잡한 문자열 유형을 필요로합니다. –