2017-02-28 7 views
-2
char string[200]="ret=\"y\" err=\"000\""; 
    char stringg[50]; 
    char *arg; 
    arg = strstr (string, "ret"); 
    memcpy(stringg,arg+5,1); 
    printf(stringg); 

"ret"값을 복사하고 싶습니다. 위의 프로그램에서 출력을 제공하지만 ret 값이 변경되면 프로그램에서 변경해야합니다. 이 문제를 해결하는 방법더블 반전 쉼표로 값을 저장하는 방법

+0

하면 strchr() strtok를() : 여기

는 일례이다? –

+0

'printf ("% c", stringg [0]);'를 사용하십시오. 무슨 문제가있는 것 같습니까? – Lundin

+0

제안 : "하나의 가치를 얻는 방법"에 초점을 맞추는 대신 유용한 데이터 구조로이를 파싱 할 수있는 방법에 대해 생각할 수 있습니다. –

답변

0

코드에서 배열 string에 제한을 줄 필요가 없습니다. 첫 번째 공간 인 경우, 다음 복사를 중지 NULL가 반환되지 않았 음을, 별도의 배열 또는 포인터에 모든 내용을 복사 할 수 있습니다 strstr()"ret"의 값을 찾은 후

const char string[] = "ret=\"y\" err=\"000\""; 

을하고, 검사 : 당신은 간단하게 사용할 수 있습니다 녹이다. 이렇게하면 ret = "y"이 복사됩니다. 공백이 발견되면 \0 종결 자로 배열 또는 포인터를 종료하십시오.

그런 다음 strchr(3)을 사용하여 '=' 문자의 위치를 ​​찾은 다음 해당 문자가있는 경우 그 값을 다른 변수에 할당 할 수 있습니다. 이 변수는 등호 뒤에 값을 포함합니다.

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

int main(void) { 
    const char string[] = "ret=\"y\" err=\"000\""; 
    const char *key = "ret"; 
    const char equals = '=', space = ' ', quote = '"'; 
    char *start, *copy, *next, *value; 
    size_t i; 

    start = strstr(string, key); 
    if (start != NULL) { 
     copy = strdup(start); 
     if (copy == NULL) { 
      fprintf(stderr, "Failed to copy contents of string\n"); 
      exit(EXIT_FAILURE); 
     } 
     for (i = 0; start[i] != space && start[i] != '\0'; i++) { 
      copy[i] = start[i]; 
     } 
     copy[i] = '\0'; 

     next = strchr(copy, equals); 
     if (next != NULL) { 
      next++; 
      if (*next == quote) { 
       next++; 
       next[strlen(next)-1] = '\0'; 
       value = next; 
      } 
     } 

     printf("%s = %s\n", key, value); 

     free(copy); 
    } 

    return 0; 
}