문자열을 모두 소문자로 변경하는이 함수가 있습니다.포인터를 사용하여 함수 (tolower)에 대한 단위 테스트
이 함수에 대한 단위 테스트를 만들려고하는데 잘못된 인수를 전달하는 것으로 생각되며이 오류가 발생합니다.
Segmentation Fault (core dumped)
이것은 내 코드입니다.
void example (char const * str1, int length, char * str2) {
int i;
for(i = 0; i < length; i++) {
*(str2 + i) = putchar(tolower(*(str1 + i)));
}
}
void testexample() {
char * str1 = "TEST";
char * str2 = "";
example(str1, 4, str2);
printf("%s\n", *str2);
}
int main() {
testexample();
return 0;
}
STR1 원래의 스트링이고, n 스트링의 길이, 및 STR2는 STR1의 모든 하부 케이스 버전이다.
저는 지금 당분간이 문제를 해결하려고 노력하고 있습니다.
감사합니다. 고맙습니다. 메인에서
어떻게 컴파일 되었습니까? – EOF
'str2'는 문자열 리터럴을 가리키며, 읽기 전용 일 가능성이 높습니다. 그리고 어쨌든'str1'을 복사 할만큼 길지 않습니다. – Dmitri
C11 초안 표준 n1570 : * 6.5.16 대입 연산자 구속 조건 대입 연산자는 왼쪽 피연산자로 수정 가능 값을 가져야합니다. *, * 6.3.2.1 Lvalues, arrays 및 함수 지정자 [...] 수정 가능한 lvalue 에는 배열 유형이없고 불완전 유형이없고 const한정 유형 [...] *이없는 lvalue입니다. 귀하의 컴파일러는 진단 메시지를 발행 할 의무가 있습니다. – EOF