문자 배열의 문자를 변경하는 코드를 만들려고합니다.
대부분의 코드가 잘 작동합니다. 하지만 대문자를 소문자로 (또는 그 반대로) 변경하려고하면 코드가 작동하지 않고 프로그램이 종료됩니다.
나는 포인터가 자체 또는 유사한 이유로 사용할 수 없기 때문이라고 생각합니다. 그러나 나는 올바른 이유를 지적 할 수 없다.
xy 문제라면 걱정이되는데, 내 과제이기 때문에 전체 문제를 업로드하고 싶지 않고 가능한 한 스스로 문제를 해결하고 싶은데, 옳다고 생각합니다. 프로그램을 배우는 방법.
#include <stdio.h>
#include <string.h>
int main(void){
//initialize
char *ae = "sample";
// for (){}
ae[0] -= 36;//at this point, program stops
// tried ae[0] = ae[0] -36 ; *ae = *ae - 36; and so on...
printf("%c", ae[0] - 36);
}
시간 내 주셔서 감사합니다:)
이 표현은 ...
char *ae = "sample";
... 문자열 리터럴로 포인터를 초기화합니다. 이러한 포인터 는 읽기 전용이며 수정할 수 없습니다. 표현식 ae[0] -= 36;
은이 문자열 리터럴의 첫 번째 문자를 변경하려고 시도하지만 이는 허용되지 않으며 정의되지 않은 동작을 유발 합니다.
대신 다음을 사용하십시오.
char ae[] = "sample";
또 다른 메모 36
에서, 알파벳 문자에서 빼는 것은 적어도 ASCII 인코딩이 아닌 대문자로 변환되지 않습니다 32
.
어쨌든, 이것은 당신이 사용할 수있는 매우 이식 할 수 없습니다 toupper()
와 tolower()
에서 <ctype.h>
보다 강력한 옵션에 대한 라이브러리입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다