2014-10-20 2 views
-1

안녕하세요 100 개의 문자열을 유지하고 싶습니다. 각 문자열을 2 차원 문자 배열로 복사하려고합니다. 프로그램을 컴파일하는 중에 오류가 발생합니다.문자열을 2 차원 문자 배열로 복사하는 중 오류가 발생했습니다.

error: incompatible types in assignment of 'char' to 'char [10]' 
make[1]: *** [HPortClient.o] Error 1 

어떻게이 문자열을 2D 문자 배열로 복사해야하는지 알려주세요. 아래는 코드 스 니펫입니다.

//----------------------------------------------------------------------------------------- 

#define MAX_DEVICE_NAMES 100 
#define MAX_CHAR_NAME  10 

struct HartShmDeviceData { 
    char m_Name[MAX_DEVICE_NAMES][MAX_CHAR_NAME]; 

}; 
struct HartShmDeviceData *khdev; 

void HPortClient::WriteDeviceListInShm(void) 
{ 
    HartDevice *hDev; 
    std::string tmp; 
    int i=0; 
    ITERATOR iter; 
    for(iter = m_DeviceList.begin(); iter !=m_DeviceList.end(); ++iter) 
    { 
     hDev = *iter; 
     const char *ptr=tmp.c_str(); 
     tmp = hDev->getName(); 
     ptr=tmp.c_str(); 

     strcpy(khdev->m_Name[i++],ptr); //Error in this line 

     //khdev->m_Name[tmp.size()] = '\0'; // don't forget the terminating 0 

    } 
} 
+2

정말로 오류는'strcpy()'줄에 있고 문자열을 끝내려는 다음 줄에 있지 않습니까? 'strcpy()'행은 괜찮아 보입니다. 다음 행은 괜찮습니다. – uesp

+0

'struct HartShmDeviceData * khdev'에 실제로 어디에서 메모리를 할당합니까? 그것은 결국 * 포인터 *입니다. – EOF

+0

코드가 C 또는 C++입니까? 그것이 C++에 있다면'strcpy '사용을 자제해라. –

답변

0

질문에 게시 한 코드는 올바르게 컴파일해야합니다. khdev->m_Name[tmp.size()]이 아닌 유형 char의하지만 char[MAX_CHAR_NAME]

이 BTW strcpy 이미 복사본이 제로를 종료하는 타입이기 때문에

... 
    strcpy(khdev->m_Name[i],ptr); 
    khdev->m_Name[i][tmp.size() + 1] = '\0'; // don't forget the terminating 0 
    i++ ; 
} 

khdev->m_Name[tmp.size()] = '\0' 분명히 잘못된 것입니다, 그래서 라인 khdev->m_Name[i][tmp.size() + 1] = '\0'; 실제로되지 않습니다 :

당신은 아마이 원하는 필요한. 당신이 (내가 공유 MEM에서 생각) 당신이

strcpy(khdev->m_Name[i],ptr); // this looks fine to me 
    khdev->m_Name[i++][tmp.size()] = '\0'; 

'\0'를 작성해야 어떻게 든 hDev을 할당 할 필요가 있다는 사실 옆에

+0

고마워 마이클,이 내 컴파일 문제를 해결했지만 줄 khdev-> m_Name [i] [tmp.size() + 1] = '\ 0'; 코드를 실행하는 동안 분할 오류가 발생합니다. – Tushar

+0

디버거를 사용하여 직접 디버깅해야하거나 적어도 printfs를 삽입하여 현재 진행중인 작업을 확인해야합니다. –

+0

@Tushar 당신은 'hDev? – Oncaphillis

0

는 문자이고 khdev->m_Name[]은 문자의 배열입니다.

+0

감사합니다. 이것은 또한 작동하지만 strcpy (khdev-> m_Name [i], ptr)에서 코드를 실행하는 동안 세그먼트 화 오류가 발생합니다. – Tushar

관련 문제