에서 같은 무효 포인터에서 문자 및 다양한 짧은 int 치의 압축을 풉니 다. 그런 다음 그 문자가 짧은 바이트로 추출 할 추가 바이트를 결정하는 것에 기초합니다. 예를 들어, 특정 문자가있는 경우, 4 바이트와 7 바이트를 짧은 정수로 추출하여 별도의 변수에 저장합니다. 내가 다른 어떤 문자를 가지고 있다면, 3, 4, 5 바이트를 추출하여 별도의 변수로 저장하십시오. 이 정보로 다른 관련없는 코드를 실행하십시오. 나는 이것을 몇 시간 동안 고민해왔다.내가 다음을 달성하기 위해 노력하고있어 C
int f(void *p) {
char *first = &p;
short int *third = p + 2;
short int *fifth = p + 4;
short int *seventh = p + 6;
printf("%s %s %s, %s", first, third, fifth , seventh);
}
int main(int argc, char const *argv[]) {
char test[] = "*5431234567";
f(test);
}
내 결과 :
나는 다음과 같은 시도 , -1295010920 -1295010922 ▒▒ς을 -1295010918예상 : * 4 1 3
후 나는 깨달았다 잠시 작동하지 않는 void 포인터를 역 참조하려고했습니다. 그래서 나는 주조를 시도했다 :
char* c = (char*) p;
char first = (char) (*c)
printf("%s", first);
이것은 나에게 seg 결함을 줬다.
짧은 int 캐스팅으로 비슷한 것을 시도했지만 아무 소용이 없습니다. 이것이 다소 불쾌한 질문 인 경우 사과드립니다. 나는 C에 익숙하지 않으며 포인터와 참조의 전체 개념은 새로운 것이다. 제 첫 번째 언어는 자바 였고 훨씬 더 관대합니다.
'void'포인터에 대해 산술 연산을 수행 할 수 없습니다. – jxh
'f'는'char *'매개 변수를 가져 오지 않는 것이 어떻습니까? – aschepler
공식적으로, 여러분은'void * '에 산술 연산을 할 수 없습니다. 안타깝게도 GCC는이를 강제하지 않으며'void *'를 포인터 연산에 관해서'char *'와 거의 동일하게 취급합니다. –