我需要在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;
}
答案 0 :(得分:1)
我的简短回答是:将malloc
放在函数内,将free
放在外面。
但是你提出问题的方式,就像是说“我想要举办茶话会......我应该把桌子放在哪里?”
我的意思是你的问题可以解释:
const
)。嗯,事实证明,在上面的情况1和3中,您将在函数内调用malloc
或strdup
。如果malloc
,您将把字符串数据复制到新内存中。对于strdup
,您必须修改输入字符串以使该行终止。在这些情况下,您将返回一个新分配的指针,调用者在完成它时负责释放。注意,也可以在不修改缓冲区的情况下使用strndup
。
对于数字2,将不会调用malloc
或free
,因为您只是修改缓冲区并返回指向其某些部分的指针。
在所有情况下,我都假设您已经知道在哪里为输入缓冲区本身调用malloc
和free
!
答案 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);