2017-10-29 27 views
0

나는 C로 작성된 프로젝트에서 일하고 있습니다. 내가 원하는 것은 인수로부터 값을 얻은 다음 마이크로 컨트롤러 [pic16f887]에 문자열 X가있는 마이크로 컨트롤러의 다른 코드 (ex : x = 1234567890) 나는 x [0]부터 x [3]까지의 chars 값을 읽고 D = 1234를 포함하는 다른 char D 값을 저장하려고한다. x [4]에서 x [8] 문자 어떻게 작동하는지 F는 = 5678이 단지 테스트입니다어떻게 내가 문자열을 다시 만들 수 있습니다

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

char a[50]; 
char d[50]; 
char c[50]; 

int main(int argc, const char * argv[]) { 
    strcpy(a, argv[1]); 
    strcpy(d, argv[2]); 
    strcpy(c, argv[3]); 
    strcpy(a, d); 
    strcpy(a, c); 

    printf("%s",a); 
    return 0; 
} 

참조 포함 F ..하지만 출력에만 세번째 인수 및 모든 3 번. 그럼 내 질문은 그 3 문자를 조합하여 x [0]에서 x [3]까지 읽을 수있는 별도의 문자로 저장하는 방법입니다.

+0

당신이 코드 예제를 줄 수에 감소? 사람들이 여러분이 해결해야 할 것을 더 잘 알게 될 것입니다. – everyone

+3

'strcpy (a, d)'와'strcpy (a, c)'대신'strcat (a, d)'와'strcat)'. –

답변

1

질문을 올바르게 이해하면 ' 프로그램에 전달 된 처음 3 개의 인수를 연결하려고합니다.

당신이 겪고있는 문제는 처음에 a에 저장된 문자열에 추가 할 것이라고 가정하면서 strcpy은 처음부터 버퍼 a으로 복사한다는 것입니다. 이 동작을 관찰하는 한 가지 방법은 명령 줄 인수를 프로그램 길이로 줄이는 것입니다. 예를 들어 ./a.out abcde ghij klm으로 전화하면 klmje이 인쇄되고 3 번째 인수는 인쇄되지 않습니다.

지금까지 복사 한 내용의 길이를 기억하고 이후에 버퍼의 시작 부분 인 a을 시작하는 것이 좋습니다. 실제로는 a 외에도 추가 버퍼가 필요하지 않으며 버퍼도 글로벌 일 필요는 없습니다.

다음은 당신이 무엇을 기대해야한다 :이 경우에는 독침이 매우 긴 될 수 없기 때문에

int main(int argc, const char * argv[]) { 
    char a[50]; 

    char* beginning_of_next_string = a; 
    int i = 1; 
    for (; i <= 3; ++i) { 
     strcpy(beginning_of_next_string, argv[i]); 
     beginning_of_next_strings += strlen(argv[i]); 
    } 

    printf("%s",a); 
    return 0; 
} 

또는, 당신은 또한 strcat을 사용할 수 있습니다 귀하의 질문에 대한 코멘트없이에 바실리스에 의해 제안 성능 저하의 대부분. 그런 다음

int main(int argc, const char * argv[]) { 
    char a[50]; 

    strcpy(a, argv[1]); 
    strcat(a, argv[2]); 
    strcat(a, argv[3]); 

    printf("%s",a); 
    return 0; 

}

+0

좋아요, 이것은 훌륭합니다. 그리고 더 많은 질문이 있습니다. 이제 myA 변수에 3 가지 인수가 포함되어 있습니다. 내가 어딘가에 보내고 싶다면 처음 4자를 말하고 다른 배열에 저장하자. B .. 내가 C 언어에서 알 수있는 것처럼 문자열은 끝 NULL 또는 \ 0을 가진 char 배열이다.하지만 나는 돈이 없다. –

+0

@RobertErnest 당신은 strcpy (a [0], a [1], a [2], a [3], b) 그러나 'b'가 4 자 이상인 경우 수동으로 '\ 0'을 'a'끝에 추가해야합니다. – Corristo