#include<stdio.h>
#define ASIZE 50
void Reverse(char *str){
int Asize,i=0;
char temp;
// Find the length of the string
while(*(str+i)!='\0'){
i++;
}
Asize=i;
// string reverse
for(i=0;i<(Asize/2);i++){
temp = *(str+i);
//may be below is some error with first input method 1
//but for input method 2 it works perfectly
*(str+i) = *(str+(Asize-(i+1)));
*(str+(Asize-(i+1))) = temp;
}
}
int main()
{
//input method 1. (error aries while i pass the pointer as argument)
char *s = "abcxyz";
//input method 2 (works perfectly while as function parameter)
char s[ASIZE];
scanf("%s",s);
Reverse(s);
printf("%s",s);
}
주 입력 방법 1에서는 문자열의 반대로 완벽하게 작동하지 않지만 방법 2는 작동합니다. char 포인터의 메모리 표현으로 내 개념이 명확하지 않습니다. 어쩌면 내가 질문을 올바르게하는 것이 좋지 않지만 누군가 제게 방법 1이 효과가없는 이유를 분명히 해 주시겠습니까? 도움에 미리 감사드립니다.문자 유형 포인터 메모리 할당?
문자열 상수를 수정하는 것은 정의되지 않았습니다. –
@ n.caillou GCC는이 경우 경고를 발행하는'-Wwrite-strings' 옵션을 가지고 있습니다. –