2013-11-05 2 views
0

그래서 내 문자열을 이와 같이 선언했습니다. keys [25] [50]; 값 [25] [50];문자열 배열의 값을 c로 인쇄

필자는 이전 문자열을 공백으로 나눠서 키/값 배열에 각각 저장하고 있습니다. 배열의 위치에 문자열을 할당하고 printf()를 통해 해당 값을 출력하려고 할 때 문제가 발생한다고 생각합니다. 항상 null입니다. 문자열이나 인쇄물 할당에 문제가 있습니까?

strcpy(buff, buf); 
bufcopy = strtok(buff, " "); 
if (strcmp(job, "PUT") == 0) { 
    //keys[i] = bufcopy; 
    strcpy(keys[i], bufcopy); 
    printf("server received: %s", keys[i]); 
    i++; 
} 
+0

무엇이'printf ("bufcopy : % s", bufcopy);'show? – sdanzig

+0

올바른 문자열을 표시합니다. 어떤 이유로 문자열을 복사하면 null 또는 다른 값이됩니다. – cj1098

+1

게시물 *** 실제 *** 코드. * 정확한 ** 코드에 "올바른 문자열"을 표시했다는 말입니까? 'printf ("bufcopy : % s", bufcopy);'오른쪽 위'printf ("서버 수신 : % s", keys [i]); 자신의 행동을 보여주는 완전한 샘플을 게시하십시오. 선언문 (질문에 * typed *이 아닌)이 올바른 것으로 가정하면, 다른 논리적 인 것은'buff'가 버퍼가 아닌 포인터로 선언되고 다시 실제 코드가 없다는 것입니다 나는 그것도 결론 지을 수 없다. – WhozCraig

답변

0

내가 잘못 해요,하지만 당신이 같은 입력 읽을하려는 것 같으면 제발 올바른 : 명령 줄에서

PUT key value 

하고 배열에서이 키/값 쌍을 저장

char keys[25][50]; 
char values[25][50]; 

그건 당신이 달성하려고 무엇 경우

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main(){ 
    int i = 0; 
    char keys[25][50]; 
    char values[25][50]; 
    char buf[256], *bufcopy; 
    do{ 
    fgets(buf, 255, stdin); 
    bufcopy = strtok(buf, " "); 
    if (strcmp(bufcopy, "PUT") == 0) { 
     bufcopy = strtok(NULL, " "); 
     strcpy(keys[i], bufcopy); 
     bufcopy = strtok(NULL, " "); 
     strcpy(values[i], bufcopy); 
     printf("server received pair %d - Key: %s\tValue: %s\n", i, keys[i], values[i]); 
     i++; 
    } 
    }while(i<25); 
    return 0; 
} 

키/값 배열의 끝에 도달하여 배열에 저장할 때까지 입력 내용을 읽습니다. strtok()을 연속적으로 호출하여 모든 공간에서 분할하고 다음 단어 (다음 공백까지)에 대한 포인터를 가져와야합니다. 작동 방식에 대한 자세한 내용은 strtok() 참조를 확인하십시오.