warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
익명(211.109)2020-09-22 19:50:00
답글
워닝에 forbid라고 되어있는거 보면 표준 자체로는 에러가 맞는듯
익명(211.109)2020-09-22 19:52:00
메모리 접근해서 수정하는게 불법인거고 저러케 대입하는거 자체는 노상관인걸로 암 ㅇㅅㅇ
익명(59.22)2020-09-22 19:52:00
답글
근데 정작 수정에서는 워닝/에러 다 안뜨는데.. 어케된거지
익명(211.109)2020-09-22 19:52:00
답글
배운지 좀 되서 아리까리하기는 한데 UB라서 될 수도 있고 안될 수도 있다 그랬던거 같음...
익명(59.22)2020-09-22 19:54:00
답글
보통 제정신이면 수정하려고 시도하지는 않으니깐 ㅇㅅㅇ...
익명(59.22)2020-09-22 19:54:00
답글
다시 생각해보니까 const char*를 char* 로 캐스팅한 데에서만 에러/워닝 띄우는게 맞는거 같음 ㅇㅅㅇ char* 에서 참조한 다음에 대입연산하는거 자체는 문제될게 없자나 ㅇㅅㅇ... 근데 C/C++ 컴파일러는 char* 형이 멀 가르키는지는 아무 관심이 없고 그냥 그 타입에서 연산이 유효한지 어쩐지만 따지니깐 ㅇㅅㅇ
익명(59.22)2020-09-22 20:02:00
답글
그렇겠네 리터럴에 직접 인덱싱한것도 아니고
익명(211.109)2020-09-22 20:09:00
애당초 "asdf"의 주소를 가리키고, 해당 스트링 리터럴은 정적 영역에 들어갈건데 - dc Cpp
17번(wjd918273)2020-09-22 20:00:00
g++ 로 컴파일하고 에러 난다고 했던거임? The GNU C Programming Tutorial 에도 문자열 초기화 방법으로 소개되어 있음.
/* Example 2 */
char *string2 = "A string declared as a pointer.\n";
루비(118.216)2020-09-22 20:09:00
답글
내가 첨에 에러난다고 한 사람 아님
익명(211.109)2020-09-22 20:10:00
답글
나는 C는 잘 모르겠고 C++에서는 에러가 맞을거 같은데 어떤가 본것
익명(211.109)2020-09-22 20:11:00
답글
c 코드니까 c 컴파일러로 컴파일 해야 함. c 컴파일러가 생산한 바이너리랑 c++ 컴파일러가 생산한 바이너리가 다름
루비(118.216)2020-09-22 20:14:00
답글
c++ 로 컴파일하니까... warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings] 주의 메시지 나오네. 에러 메시지는 안 나고, 실행하니까... 둘다 Segmentation fault 에러 뜨네
warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
워닝에 forbid라고 되어있는거 보면 표준 자체로는 에러가 맞는듯
메모리 접근해서 수정하는게 불법인거고 저러케 대입하는거 자체는 노상관인걸로 암 ㅇㅅㅇ
근데 정작 수정에서는 워닝/에러 다 안뜨는데.. 어케된거지
배운지 좀 되서 아리까리하기는 한데 UB라서 될 수도 있고 안될 수도 있다 그랬던거 같음...
보통 제정신이면 수정하려고 시도하지는 않으니깐 ㅇㅅㅇ...
다시 생각해보니까 const char*를 char* 로 캐스팅한 데에서만 에러/워닝 띄우는게 맞는거 같음 ㅇㅅㅇ char* 에서 참조한 다음에 대입연산하는거 자체는 문제될게 없자나 ㅇㅅㅇ... 근데 C/C++ 컴파일러는 char* 형이 멀 가르키는지는 아무 관심이 없고 그냥 그 타입에서 연산이 유효한지 어쩐지만 따지니깐 ㅇㅅㅇ
그렇겠네 리터럴에 직접 인덱싱한것도 아니고
애당초 "asdf"의 주소를 가리키고, 해당 스트링 리터럴은 정적 영역에 들어갈건데 - dc Cpp
g++ 로 컴파일하고 에러 난다고 했던거임? The GNU C Programming Tutorial 에도 문자열 초기화 방법으로 소개되어 있음. /* Example 2 */ char *string2 = "A string declared as a pointer.\n";
내가 첨에 에러난다고 한 사람 아님
나는 C는 잘 모르겠고 C++에서는 에러가 맞을거 같은데 어떤가 본것
c 코드니까 c 컴파일러로 컴파일 해야 함. c 컴파일러가 생산한 바이너리랑 c++ 컴파일러가 생산한 바이너리가 다름
c++ 로 컴파일하니까... warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings] 주의 메시지 나오네. 에러 메시지는 안 나고, 실행하니까... 둘다 Segmentation fault 에러 뜨네
cc -O2 -pipe str.c -o str 이렇게 컴파일하면 실행해도 에러 안 뜨고