2012-11-21 3 views
0

char *에서 특정 줄을 가져올 필요가 있지만 배열에 문제가있는 경우 ... 어떻게하면됩니까?ANSI C에서 문자열의 특정 줄 가져 오기

char * line get_line(char * code, int num_line);

내가 해방과 mallocs을 넣어해야합니다

기능은 다음과 같이인가?

thanx!

임 죄송합니다 ... 나는 그것을

char* obtenerLinea(char*cont, int numLinea) 
{ 
    int32_t lineaActual=0,comienzoLinea=0,caracterActual=0;  // línea 
    char *cadena; 

    while(lineaActual<numLinea) 
    { 
     comienzoLinea=caracterActual; 
     while(contenido[caracterActual]!='\n') 
      {caracterActual++;} 
     caracterActual++; 
     lineaActual++; 
    } 
    cadena = sub_string(contenido, comienzoLinea, caracterActual-comienzoLinea); 

    return cadena; 
} 
+0

더 많은 컨텍스트를 제공하고 사용법을 보여주는 더 큰 코드 스 니펫을 제공해야합니다. – dasblinkenlight

+1

과제 부호를 놓친 것 같습니까? –

+0

세부 사항을 알려주는 몇 가지 예를 제시해야합니다. – laifjei

답변

1

내 짧은 대답은 다음과 같습니다 밖의 함수 내부의 mallocfree을 넣어.

그러나 당신이 질문 한 방식과 거의 비슷합니다. "나는 티 파티를하고 싶습니다. 테이블과 의자는 어디에 두어야합니까?"

는 내 말은 당신의 질문은 해석에 열려 있습니다 :

  1. (당신이 그것을 const을하지 않음으로써 수있어 말한에도 불구하고) 입력 문자열을 수정하지 않는 당신을.
  2. do 입력 문자열을 수정하고 포인터를 반환하고자합니다.
  3. 입력 문자열을 수정하는지 여부는 중요하지 않습니다. 여전히 문자열을 복사 해 넣으려고합니다.

글쎄, 위의 경우 1과 3에서 함수 내에 malloc 또는 strdup 중 하나를 호출하게됩니다. malloc이면 문자열 데이터를 새 메모리로 복사합니다. strdup의 경우 입력 문자열을 수정하여 줄을 null로 종료해야합니다. 이 경우 새로 호출 된 포인터가 완료되면 호출자가 해제 할 책임이있는 새로 할당 된 포인터를 반환합니다. 버퍼를 수정하지 않고 strndup을 사용할 수도 있습니다.

숫자 2의 경우 버퍼를 수정하고 포인터의 일부로 포인터를 반환하기 때문에 malloc 또는 free에 대한 호출이 없습니다.

모든 경우에 입력 버퍼 자체에 대해 mallocfree을 어디에서 호출해야하는지 이미 알고 있다고 가정했습니다.

0

당신이 요구하는지 나는 100 % 명확하지 않다이며, (스페인어에) 해결 방법이, 더 명시했다 기능의이 종류는 당신이 찾고있는 :

char *get_line(char *code,int line) { 
    size_t size = strlen(code); 

    size_t current_line = 0; 
    for(size_t n=0;n<size;n++) { 
     if(current_line == line) return code+n; 
     if(code[n] == '\n') current_line++; 
    } 

    return 0; 
} 


char *data = "line1\nline2\nline3\nline4"; 

char *line = get_line(data,2); 
+0

이게 뭔가 필요한 것 뿐이지 만 ...왜 malloc을 사용하지 않았습니까? – coolerking

+0

이것은 "100 % 명확하지 않은"우려에 해당합니다. 함수의 의미를 알려주지 않으므로 제공 한 프로토 타입에서 추론 된 것입니다. 그 행은 null로 종료되거나 새로운 문자열로 복사되어야한다고 말하지 않습니다. 이 대답은 단순히 포인터를 요청 된 행의 시작 부분 또는 NULL로 리턴하는 것입니다. – paddy

관련 문제