2017-01-23 6 views
0

여기 C에서 약간 새로운 것이지만 이것은 내가 작업하고있는 것입니다.C 함수 매개 변수와 참조에서 문자열 수정

void do_something(char* str){ 
    char *new = str[0]+1; 
    printf("%s%s\n", *str, new); 

} 

int main(){ 
    char input[2]; 
    printf("Enter a two character string: \n"); 
    scanf("%s", input); 
    do_something(&input); 
} 

는 여기에 내가 간접 참조 입력 매개 변수 str를 인쇄하려면, 다음 첫 번째 문자가 하나씩 증가 매개 변수의 수정 된 버전이 사용 do_something()에서 기본적으로 do_something()

do_something("aa") 
. 
. 
. 
aaba 

에 대한 내 예상 출력입니다 아스키.

main() 함수의 내부 함수에 올바른 입력을 전달하는지 확실하지 않습니다.

도움을 주시면 감사하겠습니다.

+2

당신은 필요를 C 문자열은 NUL로 끝나는 문자 배열임을 이해해야합니다. 'new'는 C 문자열이 아닙니다. 그리고 둘 다'str'입니다. 사실,'input'도 유효한 C 문자열이 아닙니다. 왜냐하면 2 개의 문자열을 저장하기 위해 3 개의'chars' 배열이 필요하기 때문입니다. – kaylum

답변

2

내 main() 함수 내부의 함수에 올바른 입력을 전달하는지 잘 모르겠습니다.

아니요. 맞습니다.

char input[2]; // this can only hold 1 char (and the other for NUL character) 
: 입력 당신은

do_something(input);

또한이 선언은 정말 골치 아픈보고, 당신이 원하지 않는 무엇으로 매개 변수를 전달해야 이미 문자열

때문에

do_something(&input); // 잘못된

정말로 더 큰 버퍼가 있어야하고, NUL 문자에도 할당해야합니다. mething do_something 기본적


() I는 간접 참조 입력 파라미터 STR을 인쇄 할 및

char input[100] = ""; // can hold upto 99 chars, leaving 1 space for NUL 

같은 다음의 첫 번째 문자가 ASCII를 사용하여 하나씩 증가 파라미터의 수정 된 버전.

직접 기능 do_something 내부 문자열 (그리고 다른 포인터를 만들 필요가 없습니다 - ATM 완전히 잘못) 수정할 수 있습니다

void do_something(char* str){ 
    // char *new = str[0]+1; // <-- remove this 
    str[0] += 1; // <-- can change the string passed from `main` directly here 
    printf("%s\n", str); 
} 
+0

하지만 수정 된 문자열 만 인쇄됩니다. 매개 변수에서 문자열을 가져 와서 변수에 저장 한 다음 한 줄에 수정 된 원본 문자열을 인쇄하는 방법이 있는지 알고 싶습니다. 예상 결과를 확인하십시오. – user2965071

+0

그런 다음'do_something' 안에 다른 문자열을 할당해야합니다. 예를 들어,'input2'에 대한 매개 변수에서'char2 input2 [100] = "";'strcpy'를 수정하고 수정해야합니다. – artm

0

이 시도 :

void do_something(char* str) 
{ 
    char new = ++str[0]; 
    printf("%c %s\n", new, str); 
}