2013-05-25 3 views
1

문자열에서 여러 문자를 추출하여 다른 문자열에 할당하는 함수를 작성하려고합니다.C - 함수에 문자열 작성. 오류 : 예상 표현

코드 : 라인

substring(source[], 4, 3, result[]); 

"는 표현을 기대"되는 것을

// Problem 10.4 
// String extraction function 

#include <stdio.h> 

void substring (char source[], int start, int count, char result[]) 
{ 
    int i; 

    for (i = 0; i <= count; ++i) { 
     result[i] = source[start]; 
    } 

    result[i+1] = '\0'; 
} 

int main (void) 
{ 
    void substring (char source[], int start, int count, char result[]); 
    char source[] = "character", result[80]; 
    int start, count; 

    substring(source[], 4, 3, result[]); 

    printf("%s\n", result); 

    return 0; 

} 

엑스 코드는 저를 말하고있다 그리고 그것은 나를 컴파일하지 않습니다.

내 함수가 값을 반환하지 않기 때문에 혼란 스럽습니다. 문자열 자체가 문자열이므로 함수 자체에 포인터가 전달되는 것은 아닙니다. 어떤 경우에는 함수에 전달되지 않습니다. 문자열 자체가 수정되고 로컬 복사본이 아니라는 것을 의미합니까? 원래 문자열이 수정되는 경우 왜 값을 반환해야합니까?)

용의자는 구문에 따라 함수에 포인터를 전달하지 않는다는 사실과 관련이 있습니다.

미리 알려 주시면 감사하겠습니다.

+1

첫째, 왜'빈 문자열 (문자 소스 [], INT 시작, INT 수, 문자 결과 [가]) substring (source [], 4, 3, result []); 대신에 main()과 second try'부분 문자열 (source, 4, 3, result);에 대해서 설명한다. – Uroc327

+1

배열과 포인터 : http://pweb.netcom.com/~tjensen/ptr/pointers.htm – millimoose

답변

3

.

소스 []를 사용하고 있습니다.이 '[]'은 필요하지 않습니다.

배열은 C에서 참조로 전달됩니다. 배열 소스 [] (fun (source))를 전달하면 해당 기본 주소가 포인터가있는 대소 문자와 마찬가지로 함수에 전달됩니다. 또한

substring(source, 4, 3, result); 

, 호출 위에 호출하여 "AAAA"의 코드 결과. 루프에서 시작 변수를 증가시켜야하고 start = 4를 의미하는 경우 인덱스가 0에서 시작한다는 것을 잊지 말아야합니다. 5 번째 문자 'a'부터 시작하여 'acte'를 반환합니다.

코드 :

// Problem 10.4 
// String extraction function 

#include <stdio.h> 

void substring (char source[], int start, int count, char result[]) 
{ 
    int i; 

    for (i = 0; i <= count; ++i) { 
     result[i] = source[start++]; 
    } 

    result[i+1] = '\0'; 
} 

int main (void) 
{ 
    void substring (char source[], int start, int count, char result[]); 
    char source[] = "character", result[80]; 
    int start, count; 

    substring(source, 4, 3, result); 

    printf("%s\n", result); 

    return 0; 

} 

모든 최고의 ...

+0

다운 - 유권자가 여기에 의견을 말하여 나를 바로 잡으면 기뻐할 것입니다 ... – pinkpanther

+1

좋은 답변 - 고마워. –

0

source[]은 유효한 표현식이 아니며 배열의 유효한 식별자 선언입니다.

당신은 유형 char[]이다 기능에 올바른 인수를 전달해야합니다

기능에 배열을 전달하는 방법이 아니다
substring(source, 4, 3, result); 
1
void substring (char source[], int start, int count, char result[]) 
{ 
    int i; 

// for (i = 0; i <= count; ++i) { 
//  result[i] = source[start]; 
    for (i = 0; i < count; ++i) { 
     result[i] = source[start++];//start++ or start + i 
    } 

// result[i+1] = '\0'; 
    result[i] = '\0'; 
} 

int main (void) 
{ 
// void substring (char source[], int start, int count, char result[]); 
    char source[] = "character", result[80]; 
// int start, count; 

// substring(source[], 4, 3, result[]); 
    substring(source, 4, 3, result); 

    printf("%s\n", result); 

    return 0; 

}