2010-04-06 4 views
1

C 정말 내 장점하지 않고 주제에 책의 3 장을 읽은 후 지출의 연령대를 작업하는 단지하지 않는 물건을 얻으려고 노력 :C 문자열 입력 혼란

#include <stdio.h> 
char *a,*b; 
int main() 
{ 
    char input[10]; 
    fgets(input,sizeof input, stdin); 
    a = input; 
    fgets(input,sizeof input, stdin); 
    b = input; 
    printf("%s : %s",a,b); 

} 

내가했습니다 내 주요 프로젝트에서 문제를 격리. 이 코드는 두 개의 문자열을 읽은 다음 인쇄하기위한 것이지만 입력을 가리 키도록 a와 b를 설정하는 것처럼 보입니다. A와 B는 입력이 코드의 샘플 출력합니다 (\ n의 내가 제거 할 수 있습니다에 대해 걱정하지 마십시오) :

A 
B 
B 
: B 

어떻게 다른 변수 등의 입력 값을 저장 않습니다. a 또는 b 그래서 위의 경우에

A 
B 
A 
: B 

출력됩니까?

참고 : 나는 내가 그들에 문자열을 저장할 다른 변수를 가리 키도록 A 또는 B를 원하지 않는다 :

a = "A"; 
b = "B"; 

문자열 리터럴 해당하는 것입니다.

감사합니다.

답변

4

당신은해야합니다. 어쨌든 strcpy()을 사용하여 한 문자열의 내용을 다른 문자열로 복사해야합니다.

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

int main(void) 
{ 
    char input[10], a[10], b[10]; 
    fgets(input, sizeof input, stdin); 
    strcpy(a, input); 
    fgets(input, sizeof input, stdin); 
    strcpy(b, input); 
    printf("%s : %s\n", a, b); 
    return 0; 
} 
+0

고마워요, 완벽하게 작동합니다. –

1

2 개의 다른 char 버퍼 배열을 사용하십시오.

포인터는 단지 메모리 주소를 보유하고있는 것뿐입니다. 다음 코드

따라서는 :

a = input; 

모두 ab

b = input; 

동일한 메모리 어드레스, 즉, 메모리 어드레스는 상기 어레이의 첫 번째 요소의 주소 잡아. 당신이 sizeof(pointer)을 할 때 당신은 항상 x86 시스템에 4를 얻을 것이다 또한

char input1[10]; 
char input2[10]; 
fgets(input,sizeof input1, stdin); 
fgets(input,sizeof input2, stdin); 
printf("%s : %s",input1, input2); 

:

이 올바른 코드입니다. 당신은 가리키는 요소의 크기를 얻지 못합니다.

+0

저는 char 버퍼를 가리 키지 않습니다. –

+0

왜 실제로 원하는가요? – LB40

1

각 입력에 별도의 배열을 사용해야하므로 두 번째 입력이 첫 번째 입력을 덮어 쓰지 않습니다.

#include <stdio.h> 
int main() 
{ 
    char a[10]; 
    char b[10]; 
    fgets(a,sizeof a, stdin); 
    fgets(b,sizeof b, stdin); 
    printf("%s : %s",a,b); 

} 
+0

나는 a가 입력 값을 가리 키지 않는 VALUE 값과 같게하고 싶다. –

+0

그게 더 좋아? – WhirlWind

+0

C에는 차이가 없습니다. 문자열은 문자 시퀀스에 대한 포인터로 나타냅니다 (0 바이트로 끝남). 두 번째 읽기에 'input'을 다시 사용하기 전에 항상 문자열을 다른 버퍼 (예 : 동적으로 할당 된 버퍼)에 복사 할 수 있지만 더 많은 코드가 필요합니다 ... –

2

a는 입력 할 포인터입니다. a = 입력을 설정하면 a가 입력을 가리 키도록 설정됩니다.

따라서 fgets에 대한 전화는 동일한 버퍼에 영향을줍니다.

A와 B에 대해 두 개의 개별 배열을 사용하고 입력에서 A와 B로 데이터를 복사해야합니다.

참고 : 나는 내가 그들에 문자열을 저장할 다른 변수를 가리 키도록 A 또는 B를 원하지 않는다 :

A = "A"를;

b = "B";

은 문자열 상수입니다.

불행히도 C는 생각대로 작동하지 않습니다. 당신은 당신을 위해 복사를하는 더 높은 수준의 언어 사람들에게 너무 익숙합니다.

C에서 A와 B에 데이터가 포함되도록하려면 데이터 컨테이너를 지정해야하며 은 데이터를에 넣습니다. 예를 들어

: 사용자의 입력 배열 큰 별도의 배열로 ab를 선언하거나 동적으로 메모리를 할당 중 하나에

int main() 
{ 
    char input[10]; 
    char aData[10]; 
    char bData[10];  
    fgets(input,sizeof input, stdin); 
    strcpy(aData, input); 
    fgets(input,sizeof input, stdin); 
    strcpy(bData, input); 
    printf("%s : %s",aData,bData); 
} 
+1

감사합니다. 예를 들어 더 높은 수준의 언어가 때때로 도움이됩니다. D –