0

我需要在 char * 中得到一个特定的行,但我对数组做错了......有什么想法我该怎么做?

函数是这样的:

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

我应该把frees和mallocs放在哪里?

谢谢!

对不起......我必须更明确,这就是我解决它的方法(西班牙语)

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;
}
4

2 回答 2

1

我的简短回答是:把malloc函数放在里面,放在free外面。

但是你问问题的方式几乎就像是在说“我想举办一个茶会......我应该把桌子和椅子放在哪里?”

我的意思是你的问题可以解释:

  1. 不想修改输入字符串(即使您已经说过不做它是允许的const)。
  2. 确实想修改输入字符串,并希望返回一个指向它的指针。
  3. 无论您是否修改输入字符串都没有关系 - 您仍然想从中复制一个字符串。

好吧,事实证明,在上述情况 1 和 3 中,您将调用函数中的一个mallocstrdup内部。如果malloc,您将把字符串数据复制到新内存中。因为strdup您必须修改输入字符串以空终止该行。在这些情况下,您将返回一个新分配的指针,调用者在完成后负责释放该指针。请注意,也可以在strndup不修改缓冲区的情况下使用。

在数字 2 的情况下,将不会调用mallocorfree因为您只是在修改缓冲区并返回指向其中某个部分的指针。

在所有情况下,我都假设您已经知道在哪里调用malloc以及free输入缓冲区本身!

于 2012-11-21T03:21:11.360 回答
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);
于 2012-11-21T03:03:38.417 回答