2016-08-16 3 views
-3

배열에서 구입할 항목의 이름 (이 예에서는)을 포함하는 구조체를 만들려고합니다. 매트릭스에서 구입해야하는 가격과 무게입니다. 이것은 내가하려는 일의 쉬운 예일뿐입니다. strcpy를 사용하여이 값을 선언 했으므로 값을 선언합니다.이 방법을 사용하는 것이 가장 좋습니다.C에서 구조체 내에서 행렬이 작동합니까?

#include<stdio.h> 
#include<string.h> 
typedef struct Grocery_list{ 

    char item_name[2]; 
    double item_info[2][2]; 

}Grocery; 


int main(){ 

Grocery market; 
strcpy(market.item_name[0], "Apple"); 
strcpy(market.item_name[1], "Sugar"); 
strcpy(market.item_info[0][0],200); //apple weight 
strcpy(market.item_info[1][0], 3); //apple price 
strcpy(market.item_info[0][1], 300); 
strcpy(market.item_info[1][1], 4); 

printf("%f \n",martket.item_info[1][1]); 

return 0;} 

오류는 내가 구글에 대한 답변과 솔루션을 검색,하지만 노력 모든 것이 다른 오류 또는 심지어 같은 원인, 분명히

teste.C: In function ‘int main()’: 
teste.C:14:27: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive] 
strcpy(market.item_name[0], "Apple"); 
         ^
In file included from teste.C:2:0: 
/usr/include/string.h:129:14: error: initializing argument 1 of ‘char* strcpy(char*, const char*)’ [-fpermissive] 
extern char *strcpy (char *__restrict __dest, const char *__restrict __src) 
      ^
teste.C:15:27: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive] 
strcpy(market.item_name[1], "Sugar"); 
         ^
In file included from teste.C:2:0: 
/usr/include/string.h:129:14: error: initializing argument 1 of ‘char* strcpy(char*, const char*)’ [-fpermissive] 
extern char *strcpy (char *__restrict __dest, const char *__restrict __src) 
      ^
teste.C:16:35: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[0][0],200); 
           ^
teste.C:17:34: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[1][0], 3); 
           ^
teste.C:18:36: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[0][1], 300); 
            ^
teste.C:19:34: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[1][1], 4); 
           ^
teste.C:21:16: error: ‘martket’ was not declared in this scope 
printf("%f \n",martket.item_info[1][1]); 
       ^

있습니다. 프로그래밍에 익숙하지 않기 때문에 이러한 오류의 의미를 알 수 없습니다.

이 멤버 item_name이 개 문자의 배열이

+0

이것은 구조체와 아무런 관련이 없습니다. 당신은 문자열과'strcpy'를 완전히 잘못 사용하고 있습니다. – user2357112

+0

'strcpy'는 복사 ** 문자열 **입니다. –

+0

'market.item_name [0]'은 (는) 문자입니다. 'strcpy'는'char *'또는'char []'(아마도 부정확 한) 타입의 버퍼를 복사 할 버퍼가 필요합니다. – nbro

답변

0

세 가지 문제 :

구조체에 문자열 배열이 없습니다. 그것은 문자 배열을 가지고 있습니다. 당신은 이러한 배열을 가지고 item_name에 여분의 차원을 추가해야합니다

또한
typedef struct Grocery_list{ 

    char item_name[2][50]; 
    double item_info[2][2]; 

}Grocery; 

, 당신은 수치 값을 복사하려고 시도 strcpy을 사용하고 있습니다. 이 함수는 문자열 복사에 사용됩니다. 대신이 기능을 사용하는 간단한 과제 수행 : 마지막으로

market.item_info[0][0] = 200; //apple weight 
market.item_info[1][0] = 3; //apple price 
market.item_info[0][1] = 300; 
market.item_info[1][1] = 4; 

을, 당신은 당신의 printf 문에 오타가 있습니다

printf("%f \n",martket.item_info[1][1]); 

그것은해야한다 :

printf("%f \n",market.item_info[1][1]); 
+0

감사합니다. 나는 그것이 내 바보 같은 실수 였음을 알았다! 그것은 지금 일했다. 그런 작은 일에 너의 시간을 낭비해서 죄송합니다. –

+0

@VictorRM 기꺼이 도와 드릴 수 있습니다. 유용하다고 판단되면 [이 대답 수락] (http://stackoverflow.com/help/accepted-answer)을 자유롭게 할 수 있습니다. – dbush

0

미리 감사합니다, 그것은 문자열 배열이 아니다 그것은 단지 모든 문자열이 가진 기억, 단일 문자를 저장할 수있는 단 하나의 문자열 (의 특수 터미네이터 문자).

char item_name[2][64]; // Two strings, each can hold 63 characters 

멤버 item_infodouble의 배열의 배열입니다 : 당신은 아마이는 문자열 배열의 의미 char의 배열의 배열해야한다. strcpy 함수는 문자열 (배열은 char입니다)을 복사하기위한 것입니다. 당신이 market을 맞춤법이 틀린 때문에

market.item_info[0][0] = 200; //apple weight 
market.item_info[1][0] = 3; //apple price 
market.item_info[0][1] = 300; 
market.item_info[1][1] = 4; 

그리고 마지막 오류입니다 :

는 배열의 각 요소는 당신이 단지에 할당 할 수있는 의미 변수 같은 것을 기억하십시오.

오류 메시지를 읽으면 초보자도이 모든 것을 매우 분명하게 알 수 있습니다.

+0

방금 ​​알아 낸 문자열 배열. strcpy 오류는 내 바보 같은 실수였습니다. 나는이 사소한 실수를 보지 못했을 정도로 오랫동안 string/strcpy로만 작업 해왔다. 그런 작은 일에 너의 시간을 낭비해서 죄송합니다. 잘못 입력 한 철자 오류를 게시 한 직후 수정했습니다. 우리는 서로를 알지는 못하지만 무례한 행동을 시도해보십시오. 모든 사람이 프로그래밍이나 물건과 함께 사용되는 것은 아닙니다. 이러한 오류는 순수하게 "눈이 멀어"야만하고 나는 사소한 것을 인식합니다. 그러나 나를 도와 주셔서 다시 한번 감사드립니다. –

0

1 - 당신의 item_name [2]의 선언은 정확하지만 잘못 사용했습니다. 이것은 실제로 논리적 오류입니다. 사과, 설탕 등의 데이터를 저장할 충분한 공간이 필요합니다. 문자열의 마지막 문자는 '\ 0'입니다. 참으로 당신은 단지 "사과"또는 "설탕"을 저장하기 위해 한 문자를 선언합니다.

2 - strcpy은 문자열 또는 문자 배열을 조작하기위한 것으로,이 함수를 숫자 변수와 함께 사용할 수있는 권한이 없습니다.

3 (OS로 돌아 가기 전에) 맨 마지막 줄에 철자가 잘못 표시되었습니다.

관련 문제