2013-08-02 4 views
2
typedef struct { 
    char manufacturer[SIZE]; 
    char model[SIZE]; 
    int size; 
    int id; 
    int qty; 
    double cost; 
    double price; 
} tv;  

void firstSix(tv *tvarr[]); 
void firstSix(tv *tvarr[]) 
{ 
    (*tvarr[0]).manufacturer = "Vizio"; 
} 

인벤토리 프로그램을 만들고 있습니다. 이것은 여러 텔레비전에 대한 정보를 저장할 구조체 배열로 구성됩니다. 내 프로그램에서는 배열에 6 개의 항목을 하드 코딩해야하므로 구조체 배열 포인터 인수를 사용하는 함수를 만들려고합니다. 위의 코드에서 구조체 선언, 함수 프로토 타입 및 함수 정의를 포함했습니다. 모든 것은 각각의 순서대로 주전 앞뒤에 배치됩니다. Visual Studio에서 함수 정의 내의 코드에서 첫 번째 괄호를 강조 표시하고 "표현식이 수정 가능한 좌변 치 여야합니다"라는 이유를 이해할 수 없습니다. 내가 잘못하고있는 것이 무엇인지 이해하지 못합니다. 도와주세요.구조체 배열 포인터를 인수로 사용하는 함수

+1

http://c-faq.com/aryptr/arrayassign.html – Kevin

답변

2

그런 배열을 할당 할 수 없습니다. 당신은

strcpy ((*tvarr[0]).manufacturer, "Vizio");

배열에 문자열을 복사 할 때 당신이 범위를 벗어하지 않습니다 있는지 확인 할 필요가있다.

미리 문자열의 크기를 확인하거나 복사 할 최대 문자 수를 제한하는 strncpy을 사용할 수 있습니다.

배열은 수정할 수있는 l 값이 아닙니다. 그래서 기본적으로 당신은 과제의 왼편에 그것을 가질 수 없습니다.

또는 manufacturechar *manufacture으로 정의한 다음 해당 문자열을 동적으로 할당 할 수 있습니다.

manufacturer = strdup ("Vizio"); //manufacturer is char *

또는 길이에 따라하는 것이 먼저 버퍼를 동적으로 버퍼를 할당 할 때마다

manufacturer = malloc (sizeof (char) * needed_bytes);

, 당신은 그것으로 작업을 완료 한 때마다 항상 free (manufacturer) 무료로 기억을 할당합니다.

+0

고맙습니다. –

2

난 당신이

strncpy((tvarr[0])->manufacturer, "Vizio", SIZE - 1); 

케빈를 가지고 그런 짓을 할 생각; 포인터에 문자열을 할당 할 수 없으면 데이터를 배열에 복사해야합니다. 내가 할당 된 공간의 끝을 도망에서 계속 strncpy하는 것이 좋습니다.

관련 문제