2013-11-26 25 views
0

我有串char * buff,并希望其susbtring工作(从buff + x直到buff + y。 我必须复制此蜇到其他变量?还是仅仅是有没有更好的办法去实现它? 现在我希望这个子写入文件与子工作

+1

这取决于什么“工作”的手段,并在那里将afterthat使用。如果您只是阅读它,则无需复制。 – Deck

+0

我想写这个子字符串到一个文件。 – MaMu

+0

如果使用'fwrite'编写足够好,那么它是可行的。否则,您可能需要复制(或暂时将'buff [y]'设置为NUL)。 –

回答

3

没有,只是做了直接写,就像你希望:

fwrite(buff + x, y - x + 1, 1, my_file); 

以上的方式呈现闭区间,如果你说的是半开的,你需要删除+ 1。例如,用const char *buff = "hello, world";以上将写"world"如果x = 7y = 12

写入操作将从缓冲区的“切片”完成,因为这就是对fwrite()所说的全部内容。它不知道它收到的数据当然是更大的一部分。

作为注释中的指针,上面将切片视为二进制数据,如果它真的是一个字符串,那么它可能是不好的。在那种情况下,为了能够使用例如fprintf()%s,你应该使用动态格式字符串(你需要%.Ns其中N为y - x + 1):

static int substring_print(const char *s, size_t start, size_t end) 
{ 
    char fmt[16]; 

    snprintf(fmt, sizeof fmt, "%%.%us", end - start + 1); 
    fprintf(stdout, fmt, s + start); 
} 
+0

当然,这假设二进制输出是足够好的(不需要换行符解释)。 –