“경고 : 반환은 캐스트없이 포인터에서 정수를 만듭니다”는 무엇을 C에서 의미합니까?
-
16-09-2019 - |
문제
나는 C에서 6 비트 번호를 가져 가고 처음 3 비트를 운동하고 "r", "w"또는 "o"를 반환하는 C에 간단한 기능을 작성합니다.
그러나 컴파일하면이 경고를받습니다. '반환은 캐스트없이 포인터에서 정수를 만든다'. 그런 다음 프로그램을 실행할 때이 기능이 제가 후에 세 가지 중 하나가 아닌 이상한 캐릭터를 반환하고 있음을 알았습니다.
여기서 무슨 일이 일어나고 있습니까? 미리 감사드립니다.
내 기능은 다음과 같습니다.
char
readorwrite(int opcode)
{
if (opcode >> 3 == 4) {
return "r";
} else if (opcode >> 3 == 5) {
return "w";
} else {
return "o";
}
}
해결책
문제는 "r", "w"및 "o"가 문자열 상수라는 것입니다. 이는 실제 유형이 char [] 또는 char*임을 의미합니다. 즉, 기능이 실제로 제로 종료 문자열로 S 포인터를 반환하고 있음을 의미합니다. 단일 문자의 경우 'r', 'w'및 'o'를 대신 사용해야합니다.
다른 팁
당신은 a const char *
, 즉, 문자열 "o"가 char 'o'를 반환 할 때 저장되는 메모리 위치에 대한 포인터.
제휴하지 않습니다 StackOverflow