从ANSI C中的字符串中获取特定行

时间:2012-11-21 02:56:27

标签: c string ansi

我需要在char *中获得一个特定的行但是我对数组做错了...任何想法我该怎么做?

这个功能是这样的:

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

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

感谢名单!

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

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

2 个答案:

答案 0 :(得分:1)

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

但是你提出问题的方式,就像是说“我想要举办茶话会......我应该把桌子放在哪里?”

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

  1. 想要修改输入字符串(即使你已经说过不允许输​​入字符串const)。
  2. 想要修改输入字符串,并希望将指针返回到它。
  3. 是否修改输入字符串无关紧要 - 您仍然希望从中复制字符串。
  4. 嗯,事实证明,在上面的情况1和3中,您将在函数内调用mallocstrdup。如果malloc,您将把字符串数据复制到新内存中。对于strdup,您必须修改输入字符串以使该行终止。在这些情况下,您将返回一个新分配的指针,调用者在完成它时负责释放。注意,也可以在不修改缓冲区的情况下使用strndup

    对于数字2,将不会调用mallocfree,因为您只是修改缓冲区并返回指向其某些部分的指针。

    在所有情况下,我都假设您已经知道在哪里为输入缓冲区本身调用mallocfree

答案 1 :(得分: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);