2012-11-21 46 views
0

我需要獲取char *中的特定行,但是我正在做與數組有關的任何錯誤......任何想法我該怎麼做?從ANSI C中的字符串獲取特定的行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. 想修改輸入字符串,並且想要返回一個指針到它。
  3. 無論您是修改輸入字符串還是不行 - 您仍然希望從中複製一個字符串。

嗯,事實證明,在上面的情況1和3中,您將在函數內調用mallocstrdup。如果malloc,您將然後將字符串數據複製到新的內存。對於strdup,您必須修改輸入字符串以空行終止。在這些情況下,您將返回一個新分配的指針,調用者在完成該指針後負責釋放它。請注意,也可以在不修改緩衝區的情況下使用strndup

對於編號爲2的情況,將不會調用mallocfree,因爲您只是修改緩衝區並將指針返回給它的某個部分。

在所有情況下,我假定您已經知道在哪裏爲輸入緩衝區本身調用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。 – paddy

相關問題