source

경고: 할당은 캐스트 없이 포인터의 정수를 만듭니다.

factcode 2023. 8. 27. 09:56
반응형

경고: 할당은 캐스트 없이 포인터의 정수를 만듭니다.

내가 선언할 때char *다른 문자열을 가리키기 위해 포인터를 다시 사용합니다.

/* initial declaration */
char *src = "abcdefghijklmnop";
.....

/* I get the   "warning: assignment makes integer from pointer without a cast" */
*src ="anotherstring";

포인터를 다시 캐스트하려고 했지만 성공하지 못했습니다.

그 표현은*src전체 문자열이 아닌 문자열의 첫 번째 문자를 나타냅니다.재할당하기src다른 문자열을 가리키다tgt,사용하다src = tgt;.

명세서를 작성할 때

*src = "anotherstring";

컴파일러는 상수 문자열을 봅니다."abcdefghijklmnop"배열처럼대신 다음 코드를 작성했다고 가정해 보십시오.

char otherstring[14] = "anotherstring";
...
*src = otherstring;

이제, 무슨 일이 일어나고 있는지 좀 더 명확해졌습니다.왼쪽은.*src에 대한 언급char(이후src포인터-대- 형식입니다.char반면에 오른쪽은,otherstring포인터를 말합니다.

포인터가 가리키는 주소를 저장할 수 있으므로 이 설정은 엄격히 금지되지 않습니다.그러나 명시적 캐스트는 일반적으로 그러한 경우에 사용됩니다(이 경우는 그리 흔하지 않습니다).당신의 코드가 당신이 생각하는 것처럼 하지 않을 가능성이 높기 때문에 컴파일러는 빨간 깃발을 던지고 있습니다.

제가 보기에는 당신이 문자열을 할당하려고 하는 것 같습니다.C의 문자열은 C++에서와 같은 데이터 유형이 아니며 대신 다음을 사용하여 구현됩니다.char배열문자열에 값을 직접 할당할 수 없습니다.대신 다음과 같은 기능을 사용해야 합니다.strncpy그리고 친구들.<string.h>및 사용char어레이 대신char포인터포인터가 다른 정적 문자열을 가리키기를 원할 경우, 다음을 삭제합니다.*.

그 경고는 당신이 참조를 취소하고 있다는 사실에서 나온 것입니다.src임무 중에그 표현은*src활자가 있음char이것은 적분형입니다.그 표현은"anotherstring"활자가 있음char [14]이 특정 맥락에서 암시적으로 유형으로 변환되는 것.char *이 값은 배열에서 첫 번째 문자의 주소입니다.포인터 값을 적분 유형에 할당하려고 하면 경고가 발생합니다.드롭 더*부터*src예상대로 작동해야 합니다.

src = "anotherstring";

의 유형 이후로src이라char *.

Jeremiah가 말한 것과 컴파일러가 경고를 발행하는 이유는 프로덕션이 다음과 같습니다.

*src ="anotherstring";

says: "another string"의 주소("another string"은 char 포인터)를 가져와서 src(*src = ...)를 통해 간접적으로 해당 포인터를 "srdef..." 문자열의 첫 번째 char에 저장합니다. 코드에 정수에 대한 언급이 없기 때문에 경고가 이해하기 어려울 수 있습니다. 경고는 비논리적으로 보입니다.하지만 커튼 뒤에서 보이지 않는 것은 "int"와 "char"가 스토리지 측면에서 동의어라는 규칙입니다. 둘 다 동일한 비트 수를 차지합니다.컴파일러는 사용자가 정수로 저장하고 있다는 경고를 실행할 때 구분하지 않습니다.BTW는 완벽하게 괜찮고 합법적이지만 아마도 당신이 이 코드에서 원하는 것은 아닐 것입니다.

피트

노드 구조:-

struct node {
  char key[10];
  struct node *left, *right;
};

또한 당신이 이런 일을 하고 있을 때 도착할 수도 있습니다.

struct node *newNode(char item[10]) {
  struct node *temp = (struct node *)malloc(sizeof(struct node));
  temp->key[10] = item;
  temp->left = temp->right = NULL;
  return temp;
}

그것은 3행에 경고를 표시할 것이고 당신의 모든 코드입니다.좋은 소식은 다음과 같습니다.

당신은 그것이 배열이고 단순히 할 수 있다는 것을 증명해야 합니다.

temp->key[10] = item[10];

그렇게 간단하게는...

언급URL : https://stackoverflow.com/questions/5122231/warning-assignment-makes-integer-from-pointer-without-a-cast

반응형