2012-11-21 44 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

相关问题