2014-12-01 1 views
0

문자열을 표준 입력에서 버퍼로 복사하는 데 문제가 있습니다. 문자열의 크기는 12 문자로 HS1234-0.txt는 나중에 사용하기 위해 다음 코드를 사용합니다.채팅을 버퍼에 복사하는 중 오류가 발생했습니다.

그것을 액세스하려고 여기서 수행
while(1) { 
    sem_wait(&escsem); 
    pthread_mutex_lock(&esctrin); 
    char filename[12]; 
    read(STDIN_FILENO,filename,12); //this is where I read from the stdin 
    lseek(STDIN_FILENO,13,SEEK_SET); 
    buffer[bufferpos]=filename; //this is where I try to copy 
    bufferpos=(bufferpos+1) % BUFFER_SIZE; 
    conta++; 
    pthread_mutex_unlock(&esctrin); 
    sem_post(&lesem); 
} 

및이지만, 그 버퍼가 [bufferpos] 널 말하는 유지하고 file_to_open 각 조각은 서로 다른 스레드와 버퍼에서 사용되고 또한

char* file_to_open; 
    while(1){ 
    sem_wait(&lesem); 
    pthread_mutex_lock(&lertrin); 
    file_to_open=buffer[bufferpos];//this is where i try to copy the string 
    printf("buffer %s file %s\n",buffer[bufferpos],file_to_open);//and here it return null on both 
    bufferpos=(bufferpos+1) % BUFFER_SIZE; 
    conta++; 
    pthread_mutex_unlock(&lertrin); 
    sem_post(&escsem); 
    } 

012로 선언

다음 문제는 filename가 특정 루프 내에서만 유효한 로컬 변수입니다 당신이 문자 포인터의 배열로 buffer를 사용하려면 어떻게 든 사전

+1

char 버퍼 [BUFFER_SIZE]; – DRC

+0

'buffer [bufferpos] = filename; // 여기가 복사하려고합니다. 그것은 아무것도 복사하지 않습니다. 그냥'buffer [bufferpos]'를 포인터 인'filename'과 동일하게 설정합니다. –

+0

나는 buffer가'char *'타입의 배열이기 때문에 그 사실을 알고 있다고 생각했다. – Jite

답변

1

저 녀석 덕분에 도움이 될 수 있기를 바랍니다. 해당 로컬 변수에 대한 포인터를 저장하고 있지만 액세스하려고하면 유효하지 않습니다. 포인터에 대한 메모리를 동적으로 할당하거나 static으로 지정하거나 전역으로 설정하여 해당 범위 외부에서 연결할 수 있어야합니다. 당신이 "문자열"대신 버퍼 내에 저장하려면

, 당신은 그것을 문자가 아닌 문자 포인터의 배열을 확인하기 위해 버퍼에 strlcpy/strncpy 문자열 대신 필요 char buffer[SIZE]buffer의 유형을 변경 .

1
char* file_to_open; 
while(1) 
{ 
    // why use both a semaphore AND a mutex? 
    sem_wait(&lesem); 
    pthread_mutex_lock(&lertrin); 

    file_to_open=buffer[bufferpos]; 

    // per the input code, buffer[bufferpos] is a pointer to 
    // a non-null terminated array of characters (not a string due to no terminator) 
    // so this will keep outputting characters until a (random) '\0' 
    // char is encountered. this is undefined behaviour 
    printf("buffer %s file %s\n",buffer[bufferpos],file_to_open); 

    bufferpos=(bufferpos+1) % BUFFER_SIZE; 
    conta++; 
    pthread_mutex_unlock(&lertrin); 
    sem_post(&escsem); 
} 
관련 문제